Swift: 如何减少非唯一产品清单和总数量

Swift: How To Reduce List of Non-Unique Products and Sum Quantities

我有一个订单清单,每个订单都包含一个产品名称和数量。该列表可能包含重复的产品(非唯一)并且每个条目都包含一个数量。

期望的结果是获得一个“精简”的产品列表,每个产品的数量相加。

例子

Product     Qty

Apple       1
Orange      4
Banana      2
Apple       2
Banana      3
Pear        2
Apple       1

想要将数组(或新数组)缩减为:

Product     Qty

Apple       4
Banana      5
Orange      4
Pear        2

我没有做很多 Swift 开发,当然可以通过大循环迭代来解决这个问题,但我希望找到一种“Swifty”方法来完成使用 map/reduce 或 Swift 中的任何正确方法。我相信它会快得多。

主产品列表在对象数组中(产品名称:String,数量:Int)

非常感谢您提供一些见解。

可以按商品名分组,全部放入字典,然后求和。

let dict = Dictionary(grouping: originalList,
                      by: { [=10=].productName })
               .mapValues { [=10=].reduce(0, { [=10=] + .qty }) }

这给了你一个[String: Int]。如果你想要 [(productName: String, qty: Int)]

let entries = dict.map { (productName: [=11=], qty: ) }