Sum Hash值Ruby

时间:2015-09-15 18:21:08

标签: ruby

我有一系列哈希

players =  [{:id=>1, :name=>"Alda", :dice_count=>5, :hand=>[6, 5, 2, 4, 3]},
 {:id=>2, :name=>"Gonzalo", :dice_count=>5, :hand=>[1, 5, 1, 1]},
 {:id=>3, :name=>"Markus", :dice_count=>5, :hand=>[6, 2, 5, 1]},
 {:id=>4, :name=>"Luella", :dice_count=>5, :hand=>[4, 5, 1, 6, 5]}]

我希望总结数组中每个:hand值的大小。有一种简单的方法可以做到这一点吗?

因此输出将是每个:hand.size的总和。在上面的例子中,输出将是18

3 个答案:

答案 0 :(得分:6)

players.map { |player| player[:hand].size }.reduce(:+) # => 18

答案 1 :(得分:3)

单程解决方案:

players.inject(0) { | a, e | a + e[:hand].size } 
# => 18

注意inject只是reduce的另一个名称。

答案 2 :(得分:0)

这个只是为了好玩,假设hand始终是哈希中的最后一个元素。

p players.map(&:flatten).map(&:last).map(&:size).reduce(:+)