首页 > 解决方案 > 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")
            }
        }
        
    }

提前谢谢了 在此处输入图像描述

标签: swiftxcodeswiftui

解决方案


最后我有以下代码来完成我想要的任务。非常感谢

    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()
    }

推荐阅读