swift - SwiftUI 在结构中重复并按数量删除和合并它们
问题描述
请帮助我,我附有以下结构和照片。我想找到重复的饮料然后删除重复的并通过添加一个来更改原始饮料数量
var id = UUID()
var name : String
var price : Double
var extra : [DrinkExtra]
var unit : Int
var date : Date
}
我尝试了以下代码,但产生了错误和超出范围的索引,并且没有发生任何魔法。
func mergeItem(){
for i in cartDrinks.indices.sorted(by: { name1, name2 in
return cartDrinks[name1].name > cartDrinks[name2].name
}) {
if cartDrinks[i].name == cartDrinks[i + 1].name {
cartDrinks[i].unit += 1
cartDrinks.remove(at: i + 1)
print("\(cartDrinks[i].name) \(cartDrinks[i].unit)")
} else {
print("Nothing found")
}
}
}
解决方案
最后我有以下代码来完成我想要的任务。非常感谢
func mergeItem(complete:() -> Void) {
var arr = cartDrinks
var alacartarr = cartexpress
arr.enumerated().forEach { index,item in
if let existIndex = arr.firstIndex(where: {item.name == $0.name }),
existIndex != index {
arr[existIndex].unit += arr[index].unit
arr[index].unit = 0
}
}
arr.removeAll(){$0.unit == 0}
self.cartDrinks.removeAll()
self.cartDrinks.append(contentsOf: arr)
alacartarr.enumerated().forEach { index,value in
if let existedIndex = alacartarr.firstIndex(where: {value.name == $0.name}),
existedIndex != index {
alacartarr[existedIndex].quantity += alacartarr[index].quantity
alacartarr[index].quantity = 0
}
}
alacartarr.removeAll(){$0.quantity == 0}
cartexpress.removeAll()
cartexpress.append(contentsOf: alacartarr)
complete()
}
推荐阅读
- python - Python请求在python3中抓取时不返回电子邮件地址
- sbt - 使用 sbt-native-packager 时将 tgz 重命名为 tar.gz
- kubernetes - Openshift - 在项目之间连接 pod
- javascript - JavaScript 对象值由 IF 语句更新
- vba - Excel VBA 使用 Workbooks.Open 引发缓存问题错误 1004?
- python - 从列表中查找缺失的元素
- javascript - 如何使以下绝对定位的模态始终出现在中心(无论用户滚动到哪里)?
- plsql - 如何编写 Plsql 存储过程
- javascript - 使用 wasm 数组所需的最少代码量是多少
- ios - 将 Swift 中的 Azure B2C 与本机登录屏幕集成