【发布时间】:2018-01-08 16:06:21
【问题描述】:
数组中哪个元素出现次数最多,如果出现平局,返回我的用户遇到的第一个元素?
我让用户为他的高尔夫击球选择风。因此,在用户射击的每一个距离处,都会挑选出一股风并将其放入一个阵列中。数组如下。 0 = 无风,1 = 北,2 = 西,3 = 南,4 = 东(出于某些原因,我使用了 Ints,但这可能只能归因于我的半初学者知识)。 目标是返回他们在回合/关卡中遇到的最常见的风。如果出现平局,则应返回他们遇到的第一个风力条件。
我的解决方案中的当前问题是,当我遍历初始数组并将它们放在字典中以增加每个键的值时,我无法知道字典的顺序,因此我无法像最初希望的那样返回字典中的第一个键值对。我当前的设置只能通过在绑定键值对之间获取最大或最小键来对关系进行排序。这绝不会反映 myWindArray 本身的顺序。
// myWindArray 基本上表示他们拍了 8 枪,0(无风)第一枪,1(北风第二枪),...
let myWindArray = [0,1,0,3,1]
func mostCommonWind (array: [Int]) -> Int {
var dictionary: [Int: Int] = [:]
// Iterate over the dictionary
for b in array {
// Every time there is a repeat value add one to that key
dictionary[b] = (dictionary[b] ?? 0) + 1
}
let decending = dictionary.sorted(by: {$0.1 > $1.1})
return (decending[0].key)
}
mostCommonWind 返回值 0,就像我希望的那样,但它只返回 0,因为该键被排序为 0 和 1 之间的两个键中的较低值。我的意图是返回 0 的值,因为它是输入数组中放入 mostCommonWind 函数的第一个值是 0。有什么想法吗?
【问题讨论】:
标签: arrays sorting dictionary swift4