我在swift中计算模式(数组中最常见的数字)时遇到了问题。例如,在这段代码中
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次
我可以找到第一个最频繁的数字,这是2,重复3次。但是你可以看到,如果有另一个数字也重复了3次,我不能看到它使用这个功能。例如,在我的数字数组中,2重复3次,因此是Mode。但有两种模式,即4,也重复3次。我希望这个功能显示两种模式。有人能帮我指导我怎么做吗?
2条答案
按热度按时间9avjhtql1#
你只需要过滤掉等于最大计数的结果,并Map它们的键:
个字符
编辑/更新:
型
使用方法:
型
这将打印:
最频繁(mostFrequent:[2,4],计数:3)
vu8f3i0k2#
我做了我自己的函数,这是有点jankier,可能有更差的性能,但我只是想张贴这个,如果有人想要一个更容易调整的功能。在我看来,它返回了一组干净的值,并且对每个部分的功能都有清晰的注解。
字符串