Ami*_*mit 3 arrays filter swift
我必须过滤一个元素出现次数最多的数组。
初始数组:
let array1 = [1,2,3,2,4,2,5,3]
let array2 = ["abc", "def", "abc", "ert", "def", "abc"]
Run Code Online (Sandbox Code Playgroud)
过滤后,最终数组:
let filteredArray1 = [2,2,2]
let filteredArray2 = ["abc","abc","abc"]
Run Code Online (Sandbox Code Playgroud)
我的想法是从这里获取元素的数量:
就像获取 "abc" 的计数一样:
array2.filter{$0 == "abc"}.count
Run Code Online (Sandbox Code Playgroud)
但是有没有办法获得过滤后的数组?
您可以将项目分组到字典中并比较每组中的项目数
let mostFrequent = Dictionary(grouping: array1, by: {$0})
.max(by: {$0.value.count < $1.value.count})?.value ?? []
Run Code Online (Sandbox Code Playgroud)
上面的问题是,如果有两个或更多的值具有相同的计数,则只会选择一个。
当有多个最大计数时,以下解决方案处理,但我无法将其写为单行表达式
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
432 次 |
| 最近记录: |