识别并计算数组重复项

时间:2016-04-28 19:50:11

标签: arrays swift2

我有以下数组:

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)用于我期望无关紧要的事情。

3 个答案:

答案 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所示)。

相关问题