Arrays Swift:数组中有多少个相同的对象
我有一个CollectionView,里面有Arrays Swift:数组中有多少个相同的对象,arrays,swift,uitableview,Arrays,Swift,Uitableview,我有一个CollectionView,里面有 Fruit(name: String, price: Int, imageUrl: String) 用户可以选择多个水果,然后进行“结帐”,这是一个UITableView,其中选择了所有水果。 UITableViewCell包含:amountLabel,foultlabel,priceLabel 从这个角度来看,我想展示每种水果的数量和总价格 最好的方法是什么 我现在看到的是: Banana - 1$ Orange - 3$ Banana - 1$
Fruit(name: String, price: Int, imageUrl: String)
用户可以选择多个水果
,然后进行“结帐”,这是一个UITableView
,其中选择了所有水果。
UITableViewCell
包含:amountLabel
,foultlabel
,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$
这是
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
来计算行数。这是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
计算行数。您可以对数组进行分组并汇总价格
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)$")
您可以对阵列进行分组并汇总价格
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)$")
您应该将水果包装在一个Order结构中,并使用一个int计数器,当添加相同的水果时,该计数器会增加,而不是单独存储一个水果。然后,在Order结构中还可以有一个计算属性,用于返回总额。Order对象可以存储在字典中,其水果或水果名称如下所示key@JoakimDanielson他想用这个数据源做到这一点。这是他的问题。@ Rakes SasaHisti,我把它作为一个注释,而不是一个答案,这是完全不同的,所以我认为我可以提出一个供OP考虑的替代路径。你应该把你的水果包装在一个顺序结构中,和一个int计数器一起,当你添加相同的水果而不是储存一个单独的水果时,你会增加。然后,在Order结构中还可以有一个计算属性,用于返回总额。Order对象可以存储在字典中,其水果或水果名称如下所示key@JoakimDanielson他想用这个数据源做到这一点。这是他的问题。@ Rakes HasHisti,我把它作为一个注释,而不是一个答案,这是完全不同的,所以我认为我可以提出一个供OP考虑的替代路径。你能用它作为表视图的数据源吗?好的。让我重新措辞。他能用这个来让表视图以他想要的方式轻松地显示结果吗?(问题的最后一部分)我想问的是,这是否可以作为表视图的数据源,以轻松实现其所需的结果格式?能否将其用作表视图的数据源?好的。让我重新措辞。他能用这个来让表视图以他想要的方式轻松地显示结果吗?(问题的最后一部分)我想问的是,这是否可以作为表视图的数据源,以轻松实现其所需的结果格式?啊,是的,我知道有一种快速的方法可以替代
NSCountedSet
,但我记不起它是什么。这是一个比我更好的答案:)这是一个伟大的答案。很抱歉回复太晚,但我正试图用给出的信息填充单元格。我创建了一个新类FilteredFruits()
和一个新数组[FilteredFruits]()
,在打印(value.count…
之后,我还做了FilteredFruits.append(水果(amount:value.count,name:key,price:price)
,然后用FilteredFruits[indexPath.row]填充单元格.name
等。这是继续下去的正确方式吗?谢谢如果这是你所期望的,是的。啊,是的,我知道有一种快速的替代方法可以取代NSCountedSet
但我记不起它是什么。这是一个比我更好的答案:)这是一个很好的回答。很抱歉回复太晚,但我正在尝试用给定的信息填充单元格。我创建了一个新类FilteredFruits()
和一个新数组[FilteredFruits]()
,在打印(value.count…
之后,我还做了FilteredFruits.append(Fruit(amount:value.count,name:key,price:price)
然后用filteredFruits[indexPath.row].name
等填充单元格。这是继续的正确方式吗?谢谢如果这是您期望的,是的。