我有以下数组:
var newOrderItems = [Order]()
包含Order类型元素:
let order = Order(item: itemName, quantity: 1)
newOrderItems.append(order!)
在某些时候,newOrderItems成立:
[
Order("item1", 1),
Order("item1", 1),
Order("item2", 1),
Order("item2", 1),
Order("item3", 1),
Order("item1", 1)
]
我需要识别并计算重复的Order数组元素,以便形成一个字符串消息,例如:
"您订购了3 x item1,2 x item2,1 x item3"。
有一个简单的方法吗?我的解决方案要么添加过多的开销(即嵌套循环),要么过多的复杂性(即唯一NSCountedSet
)用于我期望无关紧要的事情。
答案 0 :(得分:2)
我会使用快速dictionary
来管理以下订单:
var newOrderItems = [Order: Int]()
if let order = Order(item: itemName, quantity: 1) {
if newOrderItems[order] == nil {
newOrderItems[order] = 1
} else {
newOrderItems[order]+=1
}
}
您可以打印详细信息:
var str = "You have ordered "
for order in newOrderItems.keys {
str += "\(newOrderItems[order]) x \(order.item),"
}
print(str)
希望它会有所帮助!
答案 1 :(得分:0)
当你最初将对象附加到数组时,为什么不在那里增加计数器,而不是在之后经过,以节省时间?
答案 2 :(得分:0)
怎么样:
var str = "You have ordered "
for object in newOrderItems {
let itemInstancesFound = newOrderItems!.filter({ $0["item"] as! String == object["item"] as! String }).count
str += "\(itemInstancesFound) x \(object["item"] as! String),"
}
这假设数量总是1(如我最初的Q所示)。