我有2个阵列。
product_name = ["Pomegranate", "Raspberry", "Miracle fruit", "Raspberry"]
product_quantity = [2, 4, 5, 5]
我想知道如何初始化哈希,使其成为
product_hash = {"Pomegranate"=>2, "Raspberry"=>9, "Miracle fruit"=>5}
答案 0 :(得分:4)
product_name.zip(product_quantity)
.each_with_object({}) {|(k, v), h| h[k] ? h[k] += v : h[k] = v }
#=> {"Pomegranate"=>2, "Raspberry"=>9, "Miracle fruit"=>5}
或者只使用默认值的哈希:
product_name.zip(product_quantity)
.each_with_object(Hash.new(0)) {|(k, v), h| h[k] += v }
#=> {"Pomegranate"=>2, "Raspberry"=>9, "Miracle fruit"=>5}
答案 1 :(得分:1)
我会从这样的事情开始:
product_name.zip(product_quantity)
.group_by(&:first)
.map { |k, v| [k, v.map(&:last).inject(:+)] }
.to_h
#=> { "Pomegranate" => 2, "Raspberry" => 9, "Miracle fruit" => 5}
答案 2 :(得分:1)
这只是@ llya的解决方案#2的轻微变化。
product_name.each_index.with_object(Hash.new(0)) { |i,h|
h[product_name[i]] += h[product_quantity[i]] } .
答案 3 :(得分:-1)
我们不能这样做:
product_name.zip(product_quantity).to_h
似乎为我返回正确的结果?