【发布时间】:2021-12-20 17:53:58
【问题描述】:
请帮帮我 我附有以下结构和照片。 我想找到重复的饮料然后删除重复的并通过添加一个来更改原始饮料的数量
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")
}
}
}
【问题讨论】:
-
要考虑的另一种方法是重构代码,以便为饮料本身提供一种类型(例如 Drink)和一种跟踪为饮料选择的单位的类型(例如 DrinkCounter)。这样,您可以保持 Drink 对象不变,并且仅在 UI 更改时增加/减少 DrinkCounter 对象中的计数器
-
我有饮料的要求字符串,例如两杯可乐,一杯不加冰,另一杯加冰。如果没有要求,我想合并在一起,否则在打印机时单独打印。
-
好的,你也可以将额外的东西移到 DrinkCounter(也许更好的名字是 DrinkOrder),这样 Drink 仍然是不可变的。
-
我设法根据帖子找到了重复值,但是我不知道如何将其应用于我自己的问题???????????????? . my 是一个结构类型。这是来自其他 stackoverflow 帖子的代码 let crossReference = Dictionary(grouping: cartDrinks) { element in return element.name } let duplicates = crossReference .filter{$1.count > 1 } .flatMap{($0.1)} print(duplicates)