如何在Swift字典中找到最大值?

30

所以,假设我有一个长这样的字典:

var data : [Float:Float] = [0:0,1:1,2:1.414,3:2.732,4:2,5:5.236,6:3.469,7:2.693,8:5.828,9:3.201]

我该如何编写程序来找到字典中的最大值? 有没有" data.max"命令或类似的东西?



3
let maxValue = data.sort{$0.1 < $1.1}.last // (.0 8, .1 5.828) - Leo Dabus
2
@LeoDabus 您的答案是有效的,但 sort() 不是解决这个问题的高效方法,它需要 O(nlogn) 的时间复杂度,而默认的 maxElement 只需要 O(n) 的时间复杂度。 - Victor Sigler
@VictorSigler 您的答案似乎是正确的方法。 - Leo Dabus
5个回答

36
let maximum = data.reduce(0.0) { max($0, $1.1) }

使用reduce是一个快速的方法。

或者:

data.values.max()

输出:

print(maximum) // 5.828

maxElement()已更名为max() - user5306470

33

Swift字典提供max(by:)方法。以下是来自Apple的示例:

let hues = ["Heliotrope": 296, "Coral": 16, "Aquamarine": 156]
let greatestHue = hues.max { a, b in a.value < b.value }
print(greatestHue)
// Prints "Optional(("Heliotrope", 296))"

非常感谢您!!!真的非常感谢您的发布,还有苹果链接。 - Arpit B Parekh

6

在API中存在一个名为maxElement的函数,您可以很容易地使用它,该函数返回self中的最大元素或者当序列为空时返回nil,并且在您使用字典的情况下需要提供一个基于严格弱排序的闭包。您可以像以下示例一样使用:

var data : [Float:Float] = [0:0,1:1,2:1.414,3:2.732,4:2,5:5.236,6:3.469,7:2.693,8:5.828,9:3.201]
let element = data.maxElement { $0.1 < $1.1} // (.0 8, .1 5.828)

通过值获取最大值,但您可以根据需要更改以使用键,这取决于您。

希望这可以帮助您。


4

有两种方法可以在字典中找到最大值。

第一种方法:

data.values.max

第二种方法:

data.max { $0.value < $1.value}?.value

如果你想找到最大的键:

data.max { $0.key < $1.key}?.key

3

说实话,上面提到的方法是可行的,但对于像我这样的新手来说有些不太清晰。所以,这里是我在SWIFT 5.3Xcode 12.0.1中解决从字典中查找最大值的方法:

var someDictionary = ["One": 41, "Two": 17, "Three": 23]

func maxValue() {

    let maxValueOfSomeDictionary = someDictionary.max { a, b in a.value < b.value }
    print(maxValueOfSomeDictionary!.value)
  
}

maxValue()

在点符号(即“.”)后面加上 max 并将代码放在 {} 中,以比较您的字典组件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接