arrays - 根据数组中元素的个数,获取包含元素的数组出现的频率

标签 arrays swift

这里我有元素数组。我想从中获取元素数组,根据元素的出现降序排列。

例如:我有元素数组 ["a","b","a","g","a","c","g","g","b", "a","b","c","b","c","f","a"]

预期输出是["a", "b", "c", "g", "f"] - 因为我有 a's-5, b's-4, c's-3, g's-3, f's-1。 (降序排列,根据重复元素的个数)

let x = ["1","2","3","1","1","2","3","3","3","3"]
let cnts = x.reduce(into: [:]) {
    counts, word in
    counts[word, default: 0] += 1
}
print(cnts) //["a": 5, "c": 3, "f": 1, "g": 3, "b": 4]

我被卡住了,谁能帮帮我?

最佳答案

你快到了。您现在可以根据出现次数递减对字典进行排序,然后提取键:

let result = cnts.sorted(by: { $0.value > $1.value }).map { $0.key }

完整示例:

let x = ["a","b","a","g","a","c","g","g","b","a","b","c","b","c","f","a"]
// 5 x "a", 4 x "b", 3 x "c", 1 x "f", 3 x "g"

let cnts = x.reduce(into: [:]) {
    counts, word in
    counts[word, default: 0] += 1
}
print(cnts) // ["g": 3, "c": 3, "b": 4, "f": 1, "a": 5]

let result = cnts.sorted(by: { $0.value > $1.value }).map { $0.key }
print(result) // ["a", "b", "g", "c", "f"]

关于arrays - 根据数组中元素的个数,获取包含元素的数组出现的频率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55059886/

相关文章:

ios - 点击该单元格时,如何访问 uicollectionviewcell 内标签的文本属性? ( swift )

ios - 如何处理SwiftUI中的水龙头开始

Java List<string> 在使用 Arrays.asList() 后未添加到列表

php - 如何获取递归数组的父级?

ios - 合并两个数组的每个元素并附加到一个数组

ios - 来自肖像 UIImage 的 CGImage

swift - 这个语句在 swift 中相当于什么?

c - C 中的空字节和数组

java - 如何根据模式拆分字节数组?

swift - 替换 Data.withUnsafeBytes,因为它在 Swift 5.6 中已弃用