gpt4 book ai didi

ruby - 聚合项目列表和收集总数的最佳方式

转载 作者:数据小太阳 更新时间:2023-10-29 08:38:47 24 4
gpt4 key购买 nike

我想知道是否有一个很好的 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 即。

# assuming sku is a flat array of values for a single sku type...
aggregate_sku = sku.reduce(:+)

但是,我不想对原始集合进行预过滤。有没有办法实现这一点,还是我已经在尽一切可能?

感谢任何帮助。

编辑以增加问题的清晰度。如果您觉得有必要投票关闭,请先发表评论,以便我澄清。

潜台词:我不确定 mapreduce 等是否具有我还不了解的功能(或更可能的技术),谢谢。

最佳答案

order_items = [
{sku: "A", price:10},
{sku: "B", price:5},
{sku: "C", price:2},
{sku: "B", price:5},
{sku: "A", price:10},
{sku: "B", price:5}
]

aggregate = order_items.each_with_object(Hash.new(0)) do |item, acc|
acc[ item[:sku] ] += item[:price]
end

--output:--
{"A"=>20, "B"=>15, "C"=>2}

关于ruby - 聚合项目列表和收集总数的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17873046/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com