获取数组中的每个唯一元素并为 tableview swift 计数

Rub*_*444 1 swift

我正在尝试迭代一个数组并找到所有重复项。我想用数组中的每个唯一项目之一填充我的 TableView,并能够使用分段控制器按项目名称或项目计数进行排序...

我希望单元格具有 labelOne = 唯一数组对象,而 labelTwo = 该对象重复的次数。

例如

var exampleArr = ["apple", "apple", "apple", "apple", "cat", "cat", "laptop"]
Run Code Online (Sandbox Code Playgroud)

我希望能够说苹果:4,猫:2,笔记本电脑:1

我找到了这个答案...

我担心的是这些答案(来自超链接)返回字典。

是否可以使用字典创建可排序的表视图?或者有更好的方法来做到这一点

vad*_*ian 5

NSCountedSet可以做你正在寻找的事情(需要Foundation

let exampleArr = ["apple", "apple", "apple", "apple", "cat", "cat", "laptop"]
let countedSet = NSCountedSet(array: exampleArr)
for item in countedSet {
    print(item, countedSet.count(for: item))
}
Run Code Online (Sandbox Code Playgroud)

要在表视图中使用该集合,请根据唯一对象创建一个数组

var dataArray = [String]()

dataArray = countedSet.allObjects as! [String]
Run Code Online (Sandbox Code Playgroud)

您甚至可以对数组进行排序

dataArray.sort()
Run Code Online (Sandbox Code Playgroud)

cellForRow获取项目来自dataArray和出现次数来自countedSet

let item = dataArray[indexPath.row]
let occurrences = countedSet.count(for: item)
Run Code Online (Sandbox Code Playgroud)

笔记:

NSCountedSet不知道包含项的类型,因此如果您需要该类型,则必须对其进行强制转换:

print(item as! String, countedSet.count(for: item))
Run Code Online (Sandbox Code Playgroud)