如果我有以下数组:
foo = ['a', 'b', 'c', 'd', 'e']
Ruby中是否有一种简单的方法可以将其转换为如下所示的哈希:
{ 'a' => 'a', 'b' => 'b', 'c' => 'c', 'd' => 'd', 'e' => 'e' }
我可以这样做:
Hash[foo.map{|a| [a, a]}]
效果很好,但如果还有其他方法,我很好奇。
答案 0 :(得分:4)
foo = ['a', 'b', 'c', 'd', 'e']
[foo, foo].transpose.to_h
#=> {"a"=>"a", "b"=>"b", "c"=>"c", "d"=>"d", "e"=>"e"}
foo.zip(foo).to_h
#=> {"a"=>"a", "b"=>"b", "c"=>"c", "d"=>"d", "e"=>"e"}
答案 1 :(得分:3)
您是否需要使用 这些值的哈希值,或者自我默认值的哈希值是否正常?
例如:
Hash.new { |h,k| h[k] = k }
您也可以将它与自身组合成对:
Hash[foo.zip(foo)]
答案 2 :(得分:2)
这是另一种方法:
foo = ['a', 'b', 'c', 'd', 'e']
foo.inject({}){ |h,k| h[k] = k; h }
根据评论的建议,此答案的更好变体使用了each_with_object
,因此它摆脱了尾随的; h
:
foo.each_with_object({}) { |e,h| h[e]=e }
两者的优点是没有构造中间数组。
但你提到的方式会很好用:
Hash[foo.map{|a| [a, a]}]
答案 3 :(得分:1)
你的问题没有意义。我怀疑这是一个XY问题。如果您实际上不需要将键值存储在哈希中,只需要将键返回,那么:
choice = getMenuChoice();
答案 4 :(得分:0)
我会试试这个:
foo = ['a', 'b', 'c', 'd', 'e']
hash = Hash[foo.zip foo]