Array.max(by :)理解困难

时间:2019-06-24 18:50:55

标签: swift

我似乎无法理解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()运算符即可完成。

1 个答案:

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