Swift Academy · Урок

Map, filter и reduce для массивов

Преобразуйте массивы с помощью функциональных функций высшего порядка

Урок 3 из 412 шагов

«Map, filter и reduce для массивов» — бесплатный урок Swift Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Swift Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Swift Academy содержит 4 уроков всего.

Добро пожаловать

Функции высшего порядка Swift — `map`, `filter` и `reduce` — преобразуют коллекции без изменения исходных данных. Они явно выражают намерение и устраняют циклы, в которых легко допустить ошибку.

Преобразование каждого элемента

```swift let nums = [1, 2, 3, 4] let doubled = nums.map { $0 * 2 } // [2,4,6,8] let strings = nums.map { "Item \($0)" } // ["Item 1","Item 2",...] ``` `map` применяет замыкание к каждому элементу и возвращает новый массив с результатами.

Сохранение подходящих элементов

```swift let scores = [45, 80, 92, 37, 68] let passing = scores.filter { $0 >= 60 } // [80,92,68] let even = (1...10).filter { $0 % 2 == 0 } // [2,4,6,8,10] ``` `filter` возвращает новый массив, содержащий только те элементы, для которых замыкание возвращает `true`.

Свёртка в одно значение

```swift let nums = [1, 2, 3, 4, 5] let sum = nums.reduce(0) { $0 + $1 } // 15 let product = nums.reduce(1, *) // 120 let joined = ["a","b","c"].reduce("") { $0 + $1 } // "abc" ```

Объединение преобразования, фильтрации и свёртки

```swift let result = (1...10) .filter { $0 % 2 == 0 } // [2,4,6,8,10] .map { $0 * $0 } // [4,16,36,64,100] .reduce(0, +) // 220 ``` Чтение цепочки слева направо позволяет ясно выразить конвейер обработки данных.

compactMap — преобразование и извлечение значений

```swift let strings = ["1","two","3","four","5"] let nums = strings.compactMap { Int($0) } // [1,3,5] ``` `compactMap` преобразует значения и удаляет результаты nil — это идеально подходит для преобразований, которые могут завершиться неудачей.

flatMap — объединение вложенных массивов

```swift let nested = [[1,2,3],[4,5],[6]] let flat = nested.flatMap { $0 } // [1,2,3,4,5,6] let words = ["hello world","foo bar"] let all = words.flatMap { $0.split(separator: " ") } // ["hello","world","foo","bar"] ```

forEach — только побочные эффекты

```swift [1, 2, 3].forEach { print($0) } ``` `forEach` похож на цикл `for-in`, но в нём нельзя использовать `break` или `continue`. Используйте его только тогда, когда нужны побочные эффекты и досрочно завершать выполнение не требуется.

Свёртка в словари

```swift let words = ["apple","banana","apricot","blueberry"] let grouped = words.reduce(into: [Character:[String]]()) { dict, word in let key = word.first! dict[key, default: []].append(word) } // ["a":["apple","apricot"],"b":["banana","blueberry"]] ```

Ленивые цепочки для повышения производительности

```swift let lazyResult = (1...1_000_000) .lazy .filter { $0 % 7 == 0 } .map { $0 * 2 } .prefix(5) // No intermediate arrays created! ``` Добавьте `.lazy` в начало цепочки, чтобы вычислять значения по мере необходимости.

Быстрая проверка

Какая функция преобразует каждый элемент и удаляет отсутствующие результаты?

Итоги

Главное: • `map` — преобразует каждый элемент в новый массив • `filter` — оставляет элементы, соответствующие предикату • `reduce` — сворачивает коллекцию в одно накопленное значение • `compactMap` — преобразует значения и отбрасывает nil • `flatMap` — преобразует значения и объединяет вложенные последовательности • Объединяйте операции с `.lazy`, чтобы избежать промежуточных выделений памяти Далее: двумерные массивы и вложенные коллекции.
Можно начать бесплатно

Изучай Swift с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
122
Уроки
409

Часто задаваемые вопросы

Урок «Map, filter и reduce для массивов» бесплатный?

Да — полный текст урока «Map, filter и reduce для массивов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Swift Academy, подпишись на CoddyKit PRO. Курс Swift Academy содержит 4 уроков всего.

Чему я научусь в уроке «Map, filter и reduce для массивов»?

Преобразуйте массивы с помощью функциональных функций высшего порядка Ты практикуешь Swift Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Swift Academy?

Предыдущий опыт не требуется. Swift Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Map, filter и reduce для массивов»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Swift Academy?

Да. Каждый урок Swift Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Создание и изменение массивов
  2. Сортировка, поиск и срезы
  3. Map, filter и reduce для массивов
  4. Двумерные массивы и вложенные коллекции
← Назад к Swift Academy