2012-04-23 66 views
1

Im做一個小項目,涉及國家代碼和撥號代碼紅寶石

  • 國家列表
  • 國家縮寫列表e.g英國,美國。
  • 撥打代碼。

如果用戶輸入+44,它應該拉國家與國家的縮寫

我想知道什麼是最好的方式來實現,這是?我應該創建3個不同的哈希值?或使用嵌套散列?

+0

取決於你需要多少的方式來訪問數據。輸入始終是撥號代碼,還是有時需要輸入國家代碼並獲取撥號代碼,或者輸入國家/地區名稱並獲取撥號代碼等? 「 – d11wtq 2012-04-23 10:56:38

回答

5

重新發明輪子之前,你應該檢查現有的解決方案,如countries gem

c.number #=> "840" 
c.alpha2 #=> "US" 
c.alpha3 #=> "USA" 
c.country_code #=> "1" 
c.national_destination_code_lengths #=> 3 
c.national_number_lengths #=> 10 
c.international_prefix #=> "011" 
c.national_prefix #=> "1" 
0

假設你問是因爲你需要能夠根據任何字段查找數據,可以使用類似下面的方法將記錄映射到三個不同的哈希,其中每個哈希由相關索引領域。

country_codes, names, dial_codes = [ 
    { country_code: "GB", name: "United Kingdom", dial_code: "44" }, 
    { country_code: "AU", name: "Australia",  dial_code: "61" }, 
    { country_code: "IT", name: "Italy",   dial_code: "39" } 
].inject([{}, {}, {}]) do |(cc, n, dc), record| 
    [ 
    cc.merge(record[:country_code] => record), 
    n.merge(record[:name]   => record), 
    dc.merge(record[:dial_code] => record) 
    ] 
end 

p country_codes["AU"] 
# => { country_code: "AU", name: "Australia", dial_code: "61" } 

p dial_codes["44"] 
# => { country_code: "GB", name: "United Kingdom", dial_code: "44" } 

另請注意,英國的官方國家代碼是GB,而不是英國。令人困惑,我知道。

+0

」英國的官方國家代碼是GB「。 。 。這可能是因爲英國在法律上是一個由多個國家組成的國家。這種現實往往混淆委員會。 – 2012-04-23 11:59:46