这里我有元素数组。我想从中获取元素数组,根据元素的出现降序排列。
例如:我有元素数组 ["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/