来自范围的Ruby哈希

时间:2011-10-24 17:02:02

标签: ruby

我该怎么做:

hash = {}
(140..200).each {|n| h[n] = "#{n} cm"}

但在一行中返回整个哈希? 我确信这是可能的,但我不知道如何;)

3 个答案:

答案 0 :(得分:9)

你非常接近:

hash = (140..200).inject({}) {|h, n| h[n] = "#{n} cm"; h}

答案 1 :(得分:3)

另一种选择是each_with_object

hash = (140..200).each_with_object({}) {|n, h| h[n] = "#{n} cm" }

我发现在没有注入的情况下使用inject时我忘记了块中的返回值。

您也可以使用Hash[]构造函数:

hash = Hash[(140..200).map {|n| [n, "#{n} cm"] }]

所有额外的中间阵列实例都有点浪费,但可能无关紧要。

答案 2 :(得分:0)

Hash[(140..200).map {|n| next n, "#{n} cm" }]