Потоковая передача в функциях высшего порядка (карта, фильтр и т. Д.) В Swift - PullRequest
0 голосов
/ 31 августа 2018

Я уже просмотрел несколько сообщений о том, как функции высшего порядка - filter, map, sort, reduce и т. Д. Работают в Swift .

Что я хочу знать, так это внутреннюю работу этих методов. Используют ли они потоковое для получения окончательного результата?

var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

var arr1 = arr.map { $0 * $0 }.filter { $0 % 2 == 0 } //Output: [4, 16, 36, 64, 100]

Я имею в виду, что в приведенном выше коде каждый раз, когда map обрабатывает элемент из arr, он будет передан в filter, не дожидаясь, пока map обработает все элементы в arr

1 Ответ

0 голосов
/ 31 августа 2018

Нет , нет. filter запускается только тогда, когда map завершается при обычном использовании.

Однако вы можете оптимизировать его лучше, объявив коллекцию lazy, в которой ваша фильтрация будет происходить только тогда, когда в ней есть необходимость от следующей функции в цепочке. Это также предотвращает создание промежуточных массивов. (В противном случае каждая функция создаст массив new , который затем будет передан следующей функции)


Проверьте это для действительно хорошего объяснения о ленивых коллекциях. - Ленивые коллекции в Swift

...