Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays Swift:数组中有多少个相同的对象_Arrays_Swift_Uitableview - Fatal编程技术网

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

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$

我有一个CollectionView,里面有

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
等填充单元格。这是继续的正确方式吗?谢谢如果这是您期望的,是的。