arrays - 在swift中过滤元素出现次数最多的数组

标签 arrays swift filter

我必须过滤一个元素出现次数最多的数组。

初始数组:

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"]

我的想法是从这里获取元素的数量:
  • How to count occurrences of an element in a Swift array?

  • 就像获取 "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/

    相关文章:

    ruby - 重写一个 "better"代码

    ios - 如何让 iOS 应用程序与 Mac 服务器应用程序通信?

    c - 用于选择视频/音频流的 FFmpeg 过滤器

    ruby-on-rails - 选择 rails 中具有最大列值的行

    ios - 依次调用两个Alamofire函数

    r - 筛选至少有一个值低于和高于标准 R 的分组行

    c - a[0] 在多维数组中表示(意思)是什么?

    php - 如何分解字符串数组并将结果存储在另一个数组中 (php)

    arrays - 如何删除 TypeScript 中的数组项?

    ios - didReceiveRemoteNotification :fetchCompletionHandler: but the completion handler was never called