不使用`to_h`方法创建Ruby哈希

时间:2014-04-22 06:16:12

标签: ruby dictionary

我试图为英文字母的所有字母生成一个键/值对。

在Ruby 2.1中我可以使用:

('a'..'z').each_with_index.to_h
# => { "a" => 0, "b" => 1, "c" => 2, ... }

但是,在Ruby 1.9.x中,to_h方法并不存在。这种情况的最佳解决方案是什么?

5 个答案:

答案 0 :(得分:7)

您可以使用Hash constructor/factory method ::[],将键/值对作为两个元素数组传递。

Hash[ ('a'..'z').each_with_index.to_a ]

答案 1 :(得分:4)

Hash[('a'..'z').zip(0..25)]

您也可以将它们压缩在一起

答案 2 :(得分:3)

您也可以使用splat运算符(*):

Hash[ *('a'..'z').each_with_index ]

答案 3 :(得分:0)

使用splat运算符:

=> Hash[[*[*'a'..'z'].map.with_index]]
=# {"a"=>0, "b"=>1, "c"=>2, "d"=>3, "e"=>4, "f"=>5, "g"=>6, "h"=>7......}

答案 4 :(得分:0)

另一种变体:

Hash[(0..25).map { |i| [(97+i).chr, i] }]