2

我正在做一个涉及到的小项目

  • 国家名单
  • 国家缩写列表,例如英国、美国。
  • 拨码。

如果用户输入+44,它应该拉出国家和国家缩写

我想知道实现这一点的最佳方法是什么?我应该创建 3 个不同的哈希值吗?或使用嵌套哈希?

4

2 回答 2

7

在重新发明轮子之前,您应该检查现有的解决方案,例如国家 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"
于 2012-04-23T11:43:37.833 回答
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,而不是 UK。令人困惑,我知道。

于 2012-04-23T11:13:46.527 回答