【发布时间】:2012-07-07 09:05:03
【问题描述】:
我有一个哈希如下:
drinks = {"soda" => 3, "water" => 2, "beer" => 6}
我想通过使用each 来显示每对的价值增加了三倍。
换句话说,我希望“苏打水”的值为 9,“水”的值为 6,等等。
【问题讨论】:
我有一个哈希如下:
drinks = {"soda" => 3, "water" => 2, "beer" => 6}
我想通过使用each 来显示每对的价值增加了三倍。
换句话说,我希望“苏打水”的值为 9,“水”的值为 6,等等。
【问题讨论】:
Hash[hash.map { |k,v| [k, v * 3] }]
【讨论】:
Hash[hash.map { |k,v| [k, v * 3] }] 就足够了,你不需要压扁和喷溅。
hash.mash { |k, v| [k, 3*v] }。仍在努力使其进入核心,但到目前为止还没有运气。
each 是这里的错误工具。
有多种方法可以做到这一点,具体取决于您想要的语义。一种方法是使用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}
【讨论】:
drinks数组吗?如果您就地更新变量,则更难以推理函数...
drinks = Hash[drinks.map { |drink, value| [drink, value * 3] }]
【讨论】:
drinks.each_with_object({}) { |(k,v),h| h[k] = 3 * v }
=> {"soda"=>9, "water"=>6, "beer"=>18}
【讨论】: