如何使用#each将所有哈希值三倍化?

时间:2012-07-06 21:49:06

标签: ruby hash each

我有一个哈希如下:

drinks = {"soda" => 3, "water" => 2, "beer" => 6}

我想使用each来显示每对的价值增加三倍。

换句话说,我希望“soda”的值为9,“water”的值为6,等等。

4 个答案:

答案 0 :(得分:9)

Hash[hash.map { |k,v| [k, v * 3] }]

答案 1 :(得分:5)

根据您想要的语义,有很多方法可以做到这一点。一种方法是使用Hash#each对每个键/值对进行操作。例如:

drinks = {"soda"=>3, "water"=>2, "beer"=>6}
drinks.each { |key, value| drinks[key] = value.to_i * 3 }
=> {"soda"=>9, "water"=>6, "beer"=>18}

答案 2 :(得分:3)

drinks = Hash[­drink­s.map { |dri­nk, value­| [drin­k, value­ * 3] }]

答案 3 :(得分:1)

drinks.each_with_object({}) { |(k,v),h| h[k] = 3 * v }   
  => {"soda"=>9, "water"=>6, "beer"=>18}