2014-04-22 27 views
0

我试图为英文字母的所有字母生成一个键/值对。不使用`to_h`方法创建Ruby哈希

在Ruby 2.1,我可以使用:

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

然而,在红宝石1.9.x的,该to_h方法不存在。这种情况的最佳解决方案是什么?

+3

要点澄清:'Enumerable#to_h'直到2.1才加入。 –

回答

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

您可以压缩在一起过

+1

你甚至可以省略多余的括号:'.zip(0..25)' – Stefan

+0

因为'Range'是'Enumerable'和'Enumerable#zip'存在。不需要'#to_a'。 –

+0

我接受尼尔斯莱特的第一个答案,但我喜欢这个简洁的答案:)谢谢! – professormeowingtons

0

使用图示操作:

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

又一变:

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

您可以使用图示符(*)太:

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