我在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次。我希望这个功能显示两种模式。谁能帮助我指导我怎么做?
答案 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"
}