所以,假设我有一个长这样的字典:
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"命令或类似的东西?
所以,假设我有一个长这样的字典:
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"命令或类似的东西?
let maximum = data.reduce(0.0) { max($0, $1.1) }
使用reduce
是一个快速的方法。
或者:
data.values.max()
输出:
print(maximum) // 5.828
maxElement()
已更名为max()
。 - user5306470Swift字典提供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))"
在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)
通过值获取最大值,但您可以根据需要更改以使用键,这取决于您。
希望这可以帮助您。
有两种方法可以在字典中找到最大值。
第一种方法:
data.values.max
第二种方法:
data.max { $0.value < $1.value}?.value
如果你想找到最大的键:
data.max { $0.key < $1.key}?.key
说实话,上面提到的方法是可行的,但对于像我这样的新手来说有些不太清晰。所以,这里是我在SWIFT 5.3和Xcode 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()
let maxValue = data.sort{$0.1 < $1.1}.last // (.0 8, .1 5.828)
- Leo Dabussort()
不是解决这个问题的高效方法,它需要O(nlogn)
的时间复杂度,而默认的maxElement
只需要O(n)
的时间复杂度。 - Victor Sigler