我必须过滤一个元素出现次数最多的数组。
初始数组:
let array1 = [1,2,3,2,4,2,5,3]
let array2 = ["abc", "def", "abc", "ert", "def", "abc"]
过滤后,最终数组:
let filteredArray1 = [2,2,2]
let filteredArray2 = ["abc","abc","abc"]
我的想法是从这里获取元素的数量:
就像获取 "abc"的计数一样:
array2.filter{$0 == "abc"}.count
但是有没有办法获得过滤后的数组?
最佳答案
您可以将项目分组到字典中并比较每组中的项目数
let mostFrequent = Dictionary(grouping: array1, by: {$0})
.max(by: {$0.value.count < $1.value.count})?.value ?? []
上面的问题是,如果有两个或多个具有相同计数的值,则只会选择一个。
当有多个最大计数时,以下解决方案处理,但我无法将其写为单行表达式
let dictionary = Dictionary(grouping: array1, by: {$0})
let max = dictionary.max(by: {$0.value.count < $1.value.count})?.value.count ?? 0
let mostFrequent = dictionary.filter { $0.value.count == max }.values
关于arrays - 在swift中过滤元素出现次数最多的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59711982/