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: ) }
我有一个订单清单,每个订单都包含一个产品名称和数量。该列表可能包含重复的产品(非唯一)并且每个条目都包含一个数量。
期望的结果是获得一个“精简”的产品列表,每个产品的数量相加。
例子
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: ) }