将数组转换为具有匹配值的键的哈希

时间:2016-04-13 02:58:28

标签: ruby

如果我有以下数组:

foo = ['a', 'b', 'c', 'd', 'e']

Ruby中是否有一种简单的方法可以将其转换为如下所示的哈希:

{ 'a' => 'a', 'b' => 'b', 'c' => 'c', 'd' => 'd', 'e' => 'e' }

我可以这样做:

Hash[foo.map{|a| [a, a]}]

效果很好,但如果还有其他方法,我很好奇。

5 个答案:

答案 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]