有没有办法从数组中提取值并在Ruby中为每个值分配一个唯一的键?
我希望能够打开这个数组:
["12", "21", "1985"]
进入这个哈希:
{:month => "12", :day => "21", :year => "1985"}
我不想单独分配每个值,如下所示:
arr = ["12", "21", "1985"]
bday_hash = {:month => arr[0], :day => arr[1], :year => arr[2]}
答案 0 :(得分:8)
您可以使用#zip
your_array = ["12", "21", "1985"]
keys = ['month', 'day', 'year']
keys.zip(your_array).to_h
答案 1 :(得分:4)
您可以获取数组键,使用值压缩,然后转换为哈希
keys = [:month, :day, :year]
values = ["12", "21", "1985"]
Hash[keys.zip(values)]
# => {:month=>"12", :day=>"21", :year=>"1985"}
答案 2 :(得分:2)
以下是另外两种获取所需哈希的方法。
arr_values = ["12", "21", "1985"]
arr_keys = [:month, :day, :year]
[arr_keys, arr_values].transpose.to_h
#=> {:month=>"12", :day=>"21", :year=>"1985"}
arr_keys.each_index.with_object({}) { |i, h| h[arr_keys[i]] = arr_values[i] }
#=> {:month=>"12", :day=>"21", :year=>"1985"}
答案 3 :(得分:1)
我在Array中添加了一个方法来促进这种转换。
class Array
def fold_into_hash(values)
result = {}
self.each_with_index do |key, index|
result[key] = values[index]
end
result
end
end
month_day_year = [:month, :day, :year]
#...
puts month_day_year.fold_into_hash(["12", "21", "1985"])
得出这个结果:
{:month=>"12", :day=>"21", :year=>"1985"}