如何生成类似这样的哈希?
{1 => 1, 2 => 2, 3 => 3}
从1到31循环。
答案 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)]