我有两个像这样的数组:
keys = ['a', 'b', 'c']
values = [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
Ruby中有一种简单的方法可以将这些数组转换为以下哈希吗?
{ 'a' => 1, 'b' => 2, 'c' => 3 }
Run Code Online (Sandbox Code Playgroud)
这是我的方式,但我觉得应该有一个内置的方法来轻松做到这一点.
def arrays2hash(keys, values)
hash = {}
0.upto(keys.length - 1) do |i|
hash[keys[i]] = values[i]
end
hash
end
Run Code Online (Sandbox Code Playgroud)
Bri*_*ell 53
以下内容适用于1.8.7:
keys = ["a", "b", "c"]
values = [1, 2, 3]
zipped = keys.zip(values)
=> [["a", 1], ["b", 2], ["c", 3]]
Hash[zipped]
=> {"a"=>1, "b"=>2, "c"=>3}
Run Code Online (Sandbox Code Playgroud)
这似乎不适用于旧版本的Ruby(1.8.6).以下内容应向后兼容:
Hash[*keys.zip(values).flatten]
Run Code Online (Sandbox Code Playgroud)
Mat*_*kel 10
另一种方法是使用each_with_index:
hash = {}
keys.each_with_index { |key, index| hash[key] = values[index] }
hash # => {"a"=>1, "b"=>2, "c"=>3}
Run Code Online (Sandbox Code Playgroud)
使用Array#transpose方法也可以这样做.如果您使用的是Ruby版本> = 2.1,则可以利用该方法Array#to_h,否则请使用您的老朋友,Hash::[]
keys = ['a', 'b', 'c']
values = [1, 2, 3]
[keys, values].transpose.to_h
# => {"a"=>1, "b"=>2, "c"=>3}
Hash[[keys, values].transpose]
# => {"a"=>1, "b"=>2, "c"=>3}
Run Code Online (Sandbox Code Playgroud)