在数组中看到哪个元素最多,如果有一个平局,则返回我的用户遇到的第一个元素?
我让用户为高尔夫击球挑选风。因此,在用户射击的每个距离处,拾取风并将其放入阵列中。该阵列如下。 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,因为它是放入mostCommonWindfunction的输入数组中的第一个值是0.任何想法?
答案 0 :(得分:0)
找到您的价值后,您可以使用index(of:)
:
return array.index(of: decending[0].key)!
(!
是必需的,因为返回了一个可选项,当你从数组中获取值时它不会出错。)
HTH