我试图为英文字母的所有字母生成一个键/值对。
在Ruby 2.1中我可以使用:
('a'..'z').each_with_index.to_h
# => { "a" => 0, "b" => 1, "c" => 2, ... }
但是,在Ruby 1.9.x中,to_h
方法并不存在。这种情况的最佳解决方案是什么?
答案 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] }]