Array.max (по :) сложность понимания - PullRequest
2 голосов
/ 24 июня 2019

Я не могу понять идею, лежащую в основе объяснения оператора 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 Ответ

3 голосов
/ 24 июня 2019

Цитата Стива Кэнона на форуме 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())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...