Ruby使用特定键将Array转换为Hash值

时间:2017-05-26 15:49:53

标签: arrays ruby hashmap

有没有办法从数组中提取值并在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]}

4 个答案:

答案 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"}