所以这是一个微不足道的,但希望有趣的问题。我需要使用现有Hash
的键创建具有相同键和值的Hash
。这是一个示例输入以及我迄今为止的最佳尝试:
input = {'cat' => 'meow', 'dog' => nil}
Hash[*input.keys.map {|k| [k,k]}.flatten]
#=> {'cat' => 'cat', 'dog' => 'dog'}
我认为这不是特别易读,所以我想知道在Ruby中是否有更好的,更具表现力的语法,尤其是对于维护代码的未来程序员来说可能更具可读性的语法?
这就是我在Python中做同样的事情,我觉得它更具可读性:
dict([[a,a] for a in input])
但那可能只是因为我习惯于阅读Python!
寻找适用于Ruby 1.8.6的建议,这是我受限制的版本。
答案 0 :(得分:3)
h = {'cat' => 'meow', 'dog' => nil}
#=> {"cat"=>"meow", "dog"=>nil}
Hash[h.keys.map{|k| [k,k]}]
#=> {"cat"=>"cat", "dog"=>"dog"}
这是另一种,有点脏的方式(我认为它适用于1.8.6):
h.merge(h){|k,v,v| k}
答案 1 :(得分:2)
Hash[input.keys.zip(input.keys)] #=> {"cat"=>"cat", "dog"=>"dog"}
或者使用注入:
input.keys.inject({}) { |h, k| h[k] = k ; h } #=> {"cat"=>"cat", "dog"=>"dog"}
第二个也适用于1.8.6。