Какие функции высшего порядка для коллекций в Swift вы использовали?

«Какие функции высшего порядка для коллекций в Swift вы использовали?» — вопрос из категории Swift Core, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Часто используемые функции высшего порядка: map, filter, reduce, compactMap, flatMap, forEach, sorted, contains, first(where:), allSatisfy.

Ключевые принципы:

  • Чистота: Функции не имеют побочных эффектов (за исключением forEach).
  • Цепочки вызовов (Chaining): Результат одной функции можно передать в следующую.
  • Ленивые вычисления: Использование lazy для обработки больших коллекций без создания промежуточных массивов.

Примеры использования:

let numbers = [1, 2, 3, nil, 5]

// `compactMap` игнорирует nil, `map` преобразует элементы
let doubledValidNumbers = numbers.compactMap { $0 }.map { $0 * 2 } // [2, 4, 6, 10]

// `filter` для выборки по условию
let evenNumbers = numbers.compactMap { $0 }.filter { $0 % 2 == 0 } // [2]

// `reduce` для агрегации (нахождение суммы)
let total = numbers.reduce(0) { partialResult, number in
    return partialResult + (number ?? 0)
} // 11

// Цепочка вызовов: фильтрация, преобразование, сортировка
let processed = numbers
    .compactMap { $0 }
    .filter { $0 > 1 }
    .map { $0 * $0 }
    .sorted(by: >) // [25, 9, 4]