有没有一种方法可以在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]}
#zip
。your_array = ["12", "21", "1985"]
keys = ['month', 'day', 'year']
keys.zip(your_array).to_h
to_h
。建议使用 Hash[keys.zip(values)]
,如 @MikDiet 所建议。 - vinays84keys = [:month, :day, :year]
values = ["12", "21", "1985"]
Hash[keys.zip(values)]
# => {:month=>"12", :day=>"21", :year=>"1985"}
.to_hash
进行转换,在哈希对象上只会返回自身。起初我读代码时误解了,以为转换是通过“键值对”路线进行的,这会涉及一个中间哈希和一个数组。不过在像那种情况下使用字面量更好 :) - Sergio Tulentsevarr_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"}
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"}
zip
和to_h
或Hash[]
会更快。 - the Tin Man
ary = ["12", "21", "1985"]; h = { month: ary[0], day: ary[1], year: ary[2] }
- Sergio Tulentsev