我想知道fold
这个问题是否有一个好的(或 map、reduce 等)风格的解决方案。
提供购买的集合 (order_items) 我想收集每个产品/sku 的总数。
示例集合:
[{sku: "A", price:10},
{sku: "B", price:5},
{sku: "C", price:2},
{sku: "B", price:5},
{sku: "A", price:10},
{sku: "B", price:5}]
并得到以下结果:
{"A":20, "B":15, "C":2}
目前我这样做:
aggregate = order_items.each_with_object({}){|i,o|
o[i[:sku]] ||= 0
o[i[:sku]] += i[:price]
}
这给了我想要的东西,但我想知道是否有更优雅的方式来做到这一点?
显然,如果我对单个 SKU 进行预过滤,我可以做一个经典的reduce
ie。
# assuming sku is a flat array of values for a single sku type...
aggregate_sku = sku.reduce(:+)
但是,我不想预先过滤原始集合。有没有办法实现这一点,还是我已经尽了一切可能?
任何帮助表示赞赏。
编辑以增加问题的清晰度。如果您觉得需要投票结束,请先发表评论,以便我澄清。
潜台词:我不确定map
, reduce
etc 是否具有我还不了解的功能(或更可能的技术),谢谢。