rails,插入哈希然后计算出现的逻辑

时间:2014-11-16 19:20:00

标签: ruby-on-rails ruby arrays hash

我需要创建一个存储2个元素的哈希/数组:国家代码和国家/地区发生的次数。

我想审查一些概念逻辑:我想创建一个传递到国家列表中的辅助方法。然后,我遍历每个国家/地区,并通过一系列if语句将国家/地区代码合并到哈希:

@map_country = Hash.new
if country == "United States" 
    @map_country.merge(:us => ??)

我不太确定如何添加计数器以进入哈希。有人可以帮忙吗?基本上,我想达到“美国”出现多少次。

此外,一旦我完成了这个哈希 - 我想根据计数对每个国家做一些不同的事情。如何从密钥中挑选出价值?此外,我如何获得钥匙?

<% if @map_country[:country] > 5 %>
... do this with @map_country...

谢谢!抱歉,如果这令人困惑,但真的可以在这里使用一些帮助。谢谢!

2 个答案:

答案 0 :(得分:0)

对我来说,这听起来像是在尝试计算使用#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

答案 1 :(得分:0)

如果您为此使用哈希(而不是自定义类),那么只需使用default_proc自动生成带零的条目,您只需要一个简单的增量:< / p>

@map_country = Hash.new { |h, k| h[k] = 0 }
if country == 'United States'
  @map_country[:us] += 1