用ruby生成值1到31的哈希值?

时间:2011-06-14 13:28:14

标签: ruby-on-rails ruby

如何生成类似这样的哈希?

{1 => 1, 2 => 2, 3 => 3}

从1到31循环。

7 个答案:

答案 0 :(得分:10)

例如:

(1..31).inject({}) { |h, k| h[k] = k; h}

如果你想要一个适用于所有数字的哈希,你可以这样做:

>> h = Hash.new { |h, k| h[k] = k } #=> {}
>> h[221] #=> 221

答案 1 :(得分:6)

def generate_hash r
  Hash[r.zip r]
end

generate_hash (1..31)

答案 2 :(得分:4)

另一个单行:

Hash[(1..31).map {|i| [i,i]}]

答案 3 :(得分:3)

试试这个

h = Hash.new()
for i in 1..31
    h[i] = i
end

此外,问题没有说明订单是否重要,但如果订单很重要,您可能需要考虑不同的排序选项,如此处所述

Sorting Hash of Hashes by value (and return the hash, not an array)

答案 4 :(得分:1)

(1..31).inject({}) { |hash, item| hash.merge(item => item) }

答案 5 :(得分:1)

你为什么要这样做?你这样做是因为一个月有31天吗?

反正:

hash = Hash.new() {|_, key| key if (1..31).include?(key) }
hash[1] # => 1
hash[31] # => 31
hash[32] # => nil

修改:现在使用迈克尔科尔的代码打高尔夫球!

答案 6 :(得分:0)

我的小贡献:

Hash[1.upto(31).zip 1.upto(31)]

Hash[(1.upto 31).zip(1.upto 31)]