在字典中查找最大值的功能是如何工作的



请向初学者解释在字典中查找最大值的功能是如何工作的。

我知道还有更简洁的解决方案,但我想一步一步地了解这里发生了什么。

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()

someDictionary是一个字典。Dictionary是一种序列(请参阅Dictionary的"默认实现"部分,了解它是一个序列(。序列提供了方法max(by:),该方法为:

返回序列中的最大元素,使用给定的谓词作为元素之间的比较。

Swift有尾随闭包语法,因此您可以编写.max {...}而不是.max(by: { ... })。这两种语法是相同的,但大多数开发人员在可能的情况下使用尾随闭包语法。

参数定义为:

areInIncreasingOrder

如果第一个参数应在第二个参数之前排序,则返回true的谓词;否则为false。

作为序列的Dictionary元素是一个元组(key: Key, value: Value),因此这是传递给areInIncreasingOrder的类型。

闭包定义了两个参数ab,每个参数的类型都是(key: Key, value: Value)。返回a.value是否小于b.value。Swift允许使用1语句闭包来省略return

这段话有点技术性,你可能想跳过它;DR是max根据您的闭包返回最大元素如果闭包遵守文档中定义的规则,max算法将返回最大元素,用于"的特定定义;最大值;即在根据CCD_ 15在该序列之后排序的序列中不存在元素。这个迂腐的定义在列表中有不可比较的东西时尤其重要。相等元素(有点奇怪的IMO(被定义为"相等元素";无与伦比的";因为两者都不在前。这对于NaN等值也很重要。

这将返回一个最大元素,如果Sequence为空,则返回nil。(文档上说的是"最大元素",但在不可比元素的情况下,没有承诺会返回哪一个。(

maxValueOfSomeDictionary的类型为(key: String, value: Int)?,是字典元素的可选版本,因为它可以是一个值,也可以是nil

maxValueOfSomeDictionary!将Optional转换为其包装值,或者在Optional为nil时崩溃。然后打印出其中的.value

要准确了解max的操作方式,可以阅读stdlib中的默认实现。

最新更新