我需要创建一个存储2个元素的哈希/数组:国家代码和国家/地区发生的次数。
我想审查一些概念逻辑:我想创建一个传递给国家列表的辅助方法。然后,我遍历每个国家/地区,并通过一系列if语句将国家/地区代码合并到哈希:
@map_country = Hash.new
if country == "United States"
@map_country.merge(:us => ??)
我不太确定如何添加计数器来推入哈希。有人可以帮忙吗?基本上,我想达到“美国”出现多少次。
此外,一旦我完成了这个哈希 - 我想根据计数对每个国家做一些不同的事情。如何从密钥中挑选出价值?而且,我如何获得钥匙?
<% if @map_country[:country] > 5 %>
... do this with @map_country...
谢谢!抱歉,如果这令人困惑,但真的可以在这里使用一些帮助。谢谢!
对我来说,这听起来像是在尝试计算你可以用#inject
方法做的事件:
[1] pry(main)> countries = ["United States", "Canada", "United States", "Mexico"]
=> ["United States", "Canada", "United States", "Mexico"]
[2] pry(main)> countries.inject({}) { |hash, ctr| hash[ctr] = hash[ctr].to_i + 1; hash }
=> {"United States"=>2, "Canada"=>1, "Mexico"=>1}
然后说你想用那个哈希做一些事情,你可以像这样循环:
[3] pry(main)> occ = countries.inject({}) { |hash, ctr| hash[ctr] = hash[ctr].to_i + 1; hash }
=> {"United States"=>2, "Canada"=>1, "Mexico"=>1}
[4] pry(main)> occ.each do |country, val|
[4] pry(main)* if val == 2
[4] pry(main)* puts "There are two occurences of #{country}"
[4] pry(main)* end
[4] pry(main)* end
There are two occurences of United States
如果您为此设置了使用哈希(而不是自定义类),那么只需使用default_proc
自动生成带零的条目,您就可以获得简单的增量:
@map_country = Hash.new { |h, k| h[k] = 0 }
if country == 'United States'
@map_country[:us] += 1