Swift: сколько одинаковых объектов в массиве - PullRequest
0 голосов
/ 28 мая 2019

У меня есть CollectionView с такими элементами, как ...

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

Пользователь может выбрать несколько Fruits и затем перейти к «оформлению заказа», которое представляет собой UITableView со всеми выбранными фруктами.UITableViewCell содержит: amountLabel, fruitLabel, priceLabel.

Я хочу показать, сколько из каждого фрукта и общая цена, в этом представлении.

Каков наилучший способ сделать это?

Что я вижу сейчас:

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 ]

2 голосов
/ 28 мая 2019

Вы можете сгруппировать массив и суммировать цены

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)$")
0 голосов
/ 28 мая 2019

Это идеальный случай для NSCountedSet.

С документацией по NSCountedSet можно ознакомиться здесь.

Вы можете создать 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 для количества строк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...