let myArray = [4, 4, 4, 3, 3, 3, 4, 6, 6, 5, 5, 2]// Create dictionary to map value to count var counts = [Int: Int]()// Count the values with using forEach myArray.forEach { counts[$0] = (counts[$0] ?? 0) + 1 }// Find the most frequent value and its count with max(by:) if let (value, count) = counts.max(by: {$0.1 < $1.1}) { print("(value) occurs (count) times")}输出:
4 occurs 4 times
这是一个函数:
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) } // array was empty return nil}if let result = mostFrequent(array: [1, 3, 2, 1, 1, 4, 5]) { print("(result.value) occurs (result.count) times") }1 occurs 3 times
Swift 4更新:
Swift
4引入
reduce(into:_:)了数组查找的默认值,并允许您在一条有效的行中生成频率。我们也可以使其通用,并使其适用于以下任何类型
Hashable:
func mostFrequent<T: Hashable>(array: [T]) -> (value: T, count: Int)? { let counts = array.reduce(into: [:]) { $0[$1, default: 0] += 1 } if let (value, count) = counts.max(by: { $0.1 < $1.1 }) { return (value, count) } // array was empty return nil}if let result = mostFrequent(array: ["a", "b", "a", "c", "a", "b"]) { print("(result.value) occurs (result.count) times")}a occurs 3 times



