我似乎无法理解Array.max(by:)运算符解释背后的想法。
请考虑以下代码行:
print([10, 2, 5, 1, 3].max { $0 > $1 })
我假设预期输出应为10,但实际上输出为1。现在,我在文档中阅读到,该功能的唯一参数 areInIncreasingOrder 本身就是一个函数,定义为:
A predicate that returns true if its first argument should be ordered before its second argument; otherwise, false.
我似乎无法理解这句话。为什么相邻元素的放置会影响功能结果?
注意:在实际示例中,该数组将由非原始类型的元素组成,例如,其中一个对象需要比较两个对象的日期。我知道,如果要解决上述简单的示例,则只需使用默认的Array.max()运算符即可完成。
答案 0 :(得分:3)
Quoting Steve Canon在Swift论坛中:
谓词自变量定义该函数使用的“递增顺序”。当您将>用作谓词时,就是说a> b表示a要按照使用的顺序在b之前。
以您的情况
print([10, 2, 5, 1, 3].max { $0 > $1 })
数组元素的升序是
10, 5, 3, 2, 1
,相对于该顺序的最大元素为1
。
如果要获得关于“自然顺序”的最大元素,则只需使用
print([10, 2, 5, 1, 3].max())