用多个键散列的数组

时间:2014-02-02 14:59:34

标签: ruby arrays hash multidimensional-array

我该怎么做:

[[3, 18], [5, 20], [7, 22]]

进入这个:

[
  {:quantity=>3, :price=>18},
  {:quantity=>5, :price=>20},
  {:quantity=>7, :price=>22}
]

希望得到一个单行答案,但我会接受我能得到的。

3 个答案:

答案 0 :(得分:4)

使用Array#map

a = [[3, 18], [5, 20], [7, 22]]
a.map { |item| {quantity: item[0], price: item[1]} }
# => [{:quantity=>3, :price=>18},
#     {:quantity=>5, :price=>20},
#     {:quantity=>7, :price=>22}]

a.map { |q, p| {quantity: q, price: p} }
# => [{:quantity=>3, :price=>18},
#     {:quantity=>5, :price=>20},
#     {:quantity=>7, :price=>22}]

a.map { |item| Hash[[:quantity, :price].zip(item)] }
# => [{:quantity=>3, :price=>18},
#     {:quantity=>5, :price=>20},
#     {:quantity=>7, :price=>22}]

答案 1 :(得分:2)

使用Array#map

执行以下操作
a = [[3, 18], [5, 20], [7, 22]]
a.map { |v1,v2| {:quantity => v1, :price => v2} }

答案 2 :(得分:0)

冒着击败死马的风险,我的版本,以及更好的命名

a.map {|(quantity, price)| {quantity: quantity, price: price} }