数组中的计算模式(多个模式)

时间:2018-01-15 00:16:48

标签: arrays swift

我在swift中计算Mode(数组中最常见的数字)时遇到问题。 例如,在此代码中

func mostFrequent(array: [Int]) -> (value: Int, count: Int)?
{
    var counts = [Int: Int]()

    array.forEach { counts[$0] = (counts[$0] ?? 0) + 1 }

    if let (value, count) = counts.max(by: {$0.1 < $1.1}) {
        return (value, count)
    }

    return nil
}

if let result = mostFrequent(array: [2,2,2,3,4,4,4,5,6]) {
    print("\(result.value) is repeated \(result.count) times")    
}

打印:2重复3次

我可以找到第一个最常见的数字,即重复3次的2。但是你可以看到是否有另一个数字也重复了3次,我无法通过使用这个功能看到它。 例如,在我的数字数组中,2重复3次,因此是模式。但有两种模式,即4次重复3次。我希望这个功能显示两种模式。谁能帮助我指导我怎么做?

1 个答案:

答案 0 :(得分:0)

您只需要过滤等于最大数量的结果并映射其键:

func mostFrequent(array: [Int]) -> (mostFrequent: [Int], count: Int)? {
    var counts: [Int: Int] = [:]

    array.forEach { counts[$0] = (counts[$0] ?? 0) + 1 }
    if let count = counts.max(by: {$0.value < $1.value})?.value {
        return (counts.filter{$0.value == count}.map{$0.key}, count)
    }
    return nil
}
if let result = mostFrequent(array: [2, 2, 2, 3, 4, 4, 4, 5, 6]) {
    print(result) // "(mostFrequent: [2, 4], count: 3)\n"
}