Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
不使用'to_h'方法创建Ruby哈希_Ruby_Dictionary - Fatal编程技术网

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

不使用'to_h'方法创建Ruby哈希,ruby,dictionary,Ruby,Dictionary,我正在尝试为英语字母表中的所有字母生成一个键/值对 在Ruby 2.1中,我可以使用: ('a'..'z').each_with_index.to_h # => { "a" => 0, "b" => 1, "c" => 2, ... } 然而,在Ruby 1.9.x中,to_h方法并不存在。对于这种情况,最好的解决方案是什么?您可以使用,将键/值对作为两个元素数组传递给它 Hash[ ('a'..'z').each_with_index.to_a ] 您也可以将它们压

我正在尝试为英语字母表中的所有字母生成一个键/值对

在Ruby 2.1中,我可以使用:

('a'..'z').each_with_index.to_h
# => { "a" => 0, "b" => 1, "c" => 2, ... }
然而,在Ruby 1.9.x中,to_h方法并不存在。对于这种情况,最好的解决方案是什么?

您可以使用,将键/值对作为两个元素数组传递给它

Hash[ ('a'..'z').each_with_index.to_a ]
您也可以将它们压缩在一起

使用splat操作符:

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

Hash[(0..25).map { |i| [(97+i).chr, i] }]
您也可以使用splat运算符(
*
):


您甚至可以省略额外的一对括号:
.zip(0..25)
,因为
范围
可枚举和
可枚举35; zip
存在。不需要。。我第一个接受了尼尔·斯莱特的答案,但我喜欢这个简短的答案:)谢谢!这种方法的一个优点是,您可以使用它将任何
范围
映射到相同大小的任何其他
范围
。其他答案从第一个构建了第二个数组-我认为这是一个更简单的设计,但在不可能的情况下,不如这个答案所能证明的灵活。澄清点:
Enumerable#to_h
直到2.1才添加。
Hash[(0..25).map { |i| [(97+i).chr, i] }]
Hash[ *('a'..'z').each_with_index ]