将数组数组转换为哈希,将第一个数组的元素作为哈希的键

Ahm*_*mza 2 ruby ruby-on-rails ruby-2.2

我想转换这个数组

[['a', 'b'],['c', 'd'],['e', 'f']] 
Run Code Online (Sandbox Code Playgroud)

这个哈希

{
  "a" : "c",
  "b" : "d"
},
{
  "a" : "e",
  "b" : "f"
}
Run Code Online (Sandbox Code Playgroud)

怎么做?

我试图使用group_by和正常的迭代器,但到目前为止没有运气.有任何想法吗?

Ale*_*kin 5

? arr = [[:a, :b],[:c, :d],[:e, :f],[:g, :h]]
? key, values = arr.first, arr[1..-1]
? values.map { |v| key.zip v }.map &:to_h
#? [
#  [0] {
#    :a => :c,
#    :b => :d
#  },
#  [1] {
#    :a => :e,
#    :b => :f
#  },
#  [2] {
#    :a => :g,
#    :b => :h
#  }
# ]
Run Code Online (Sandbox Code Playgroud)

请注意,与此处提供的其他解决方案不同,此处将把第一个元素作为键映射到任意长度的尾部.

UPD对于遗产红宝石,没有Array#to_h:

values.map { |v| key.zip v }.map { |e| Hash[e] }
Run Code Online (Sandbox Code Playgroud)