假设我有以下类,product.rb
:
require 'yaml'
class Product
attr_accessor :id, :price
def initialize args = {}
options = {:id => "", :price => 0}.merge(args)
self.id, self.price = options[:id], options[:price]
end
def inspect
self.to_yaml
end
end
以及下面的示例程序,example.rb
:
require_relative 'product'
products = Array.new
(1..5).each do |n| # Create 5 products with random id and price
products << Product.new(
:id => rand(1..5),
:price => rand(10..50))
end
products.each { |p| puts p.inspect }
运行 example.rb
的示例输出:
C:\>ruby example.rb
--- !ruby/object:Product
id: 3
price: 48
--- !ruby/object:Product
id: 2
price: 47
--- !ruby/object:Product
id: 5
price: 32
--- !ruby/object:Product
id: 5
price: 49
--- !ruby/object:Product
id: 3
price: 33
结果是具有重复 ID 的 Product 类型的对象数组。
如何创建一个以 id 为键,价格之和为值的散列?
期望结果示例:
{ "2" => 47, "3" => 81, "5" => 81 } # { id => sum of price }
最佳答案
您可以使用each_with_object
来注入(inject)默认值为 0 的哈希,如下所示:
products.each_with_object(Hash.new(0)) { |p, 结果|结果[p.id] += p.price }
关于ruby - 如何根据数组中对象的两个属性创建哈希?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41428856/