Swift:数组中有多少个相同的对象

时间:2019-05-28 08:38:30

标签: arrays swift uitableview

我有一个CollectionView,其中包含......

Fruit(name: String, price: Int, imageUrl: String)

用户可以选择多个Fruits,然后进行“签出”,即选择了所有水果的UITableViewUITableViewCell包含:amountLabelfruitLabelpriceLabel

在此视图中,我想显示每种水果的数量和总价。

做到这一点的最佳方法是什么?

我现在看到的是:

Banana - 1$
Orange - 3$
Banana - 1$
Apple - 2$
Apple - 2$
Banana - 1$
Orange - 3$
Orange - 3$

total: 16$

我想看的东西:

3x Banana - 3$
2x Apple - 4$
3x Orange - 9$

total: 16$

2 个答案:

答案 0 :(得分:2)

您可以对数组进行分组并汇总价格

let grouped = Dictionary(grouping: fruits, by: {$0.name})
var total = 0
for (key, value) in grouped {
    let price = value.reduce(0, {$0 + $1.price})
    print(value.count, key, "\(price)$")
    total += price
}
print("total: \(total)$")

答案 1 :(得分:0)

这是NSCountedSet的完美案例。

You can see the documentation for NSCountedSet here.

您可以创建一个NSCountedSet,例如...

let countedSet = NSCountedSet(array: fruits)

然后像这样获取信息...

countedSet.objectEnumerator.forEach {
    let count = countedSet.count(for: $0)

    print($0.name, count, count * $0.price)
}

对于表格视图,您可以使用countedSet.objectEnumerator.allObjects.count作为行数。