您可以使用NSCountedSet 来获取arr 中所有元素的计数,然后您可以构建Dictionary,其中键是元素的出现次数,值是数组具有关键出现次数的元素。通过迭代 Set(arr) 而不是简单地 arr 来构建字典,您可以确保重复元素只添加一次到字典中(例如,对于您的原始示例,5 不会添加两次,因为频率为 2)。
对于打印,您只需要遍历 Dictionary 的键并打印键及其对应的值。我只是对键进行排序,以使打印按出现次数的升序进行。
let arr = [4,1,5,5,3,2,3,6,2,7,8,2,7,2,8,8,8,7]
let counts = NSCountedSet(array: arr)
var countDict = [Int:[Int]]()
for element in Set(arr) {
countDict[counts.count(for: element), default: []].append(element)
}
countDict
for freq in countDict.keys.sorted() {
print("Elements with frequency \(freq) are {\(countDict[freq]!)}")
}
输出:
Elements with frequency 1 are {[4, 6, 1]}
Elements with frequency 2 are {[5, 3]}
Elements with frequency 3 are {[7]}
Elements with frequency 4 are {[2, 8]}
Swift 3 版本:
let arr = [4,1,5,5,3,2,3,6,2,7,8,2,7,2,8,8,8,7]
let counts = NSCountedSet(array: arr)
var countDict = [Int:[Int]]()
for element in Set(arr) {
if countDict[counts.count(for: element)] != nil {
countDict[counts.count(for: element)]!.append(element)
} else {
countDict[counts.count(for: element)] = [element]
}
}
for freq in countDict.keys.sorted() {
print("Elements with frequency \(freq) are {\(countDict[freq]!)}")
}