0Pricing
Swift Academy · Урок

flatMap и цепочки

Выравнивайте вложенные коллекции и объединяйте преобразования в цепочку.

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

Два варианта плоского отображения

flatMap для последовательности раскрывает один уровень вложенности. Он применяет замыкание, возвращающее последовательность для каждого элемента, а затем объединяет все эти последовательности в один плоский массив.

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

Преобразуем массив массивов в один массив:

let nested = [[1, 2], [3, 4], [5]]
let flat = nested.flatMap { $0 }
print(flat)  // [1, 2, 3, 4, 5]

Плоское отображение с созданием последовательностей

Каждый элемент может преобразоваться в несколько элементов:

let nums = [1, 2, 3]
let expanded = nums.flatMap { [$0, $0 * 10] }
print(expanded)  // [1, 10, 2, 20, 3, 30]

Сочетание всех вариантов

Плоское отображение удобно для построения декартовых произведений:

let suits = ["Hearts", "Spades"]
let ranks = ["A", "K"]
let deck = suits.flatMap { suit in ranks.map { "\($0) of \(suit)" } }
print(deck)  // ["A of Hearts", "K of Hearts", "A of Spades", "K of Spades"]

Плоское отображение и compactMap

Раньше flatMap также извлекал значения из необязательных элементов, но теперь эту роль выполняет compactMap. Сегодня:

  • flatMap — объединяет вложенные последовательности
  • compactMap — удаляет nil из результатов, являющихся необязательными значениями

Преобразование слов в символы

Развернём каждую строку в последовательность символов:

let words = ["hi", "yo"]
let chars = words.flatMap { Array($0) }
print(chars)  // ["h", "i", "y", "o"]

Объединение промежуточных результатов

Соберём элементы из вложенных объектов модели:

struct Team { let members: [String] }
let teams = [Team(members: ["Ann", "Bo"]), Team(members: ["Cy"])]
let all = teams.flatMap { $0.members }
print(all)  // ["Ann", "Bo", "Cy"]

Объединение преобразований в цепочку

Настоящая сила проявляется в объединении операций в цепочку: map, filter, flatMap и reduce читаются сверху вниз как конвейер обработки данных. Каждый шаг создаёт новую последовательность для следующего шага.

Полный конвейер

Отфильтруем, развернём, преобразуем, а затем просуммируем:

let groups = [[1, 2, 3], [4, 5], [6]]
let result = groups
    .flatMap { $0 }
    .filter { $0 % 2 == 0 }
    .map { $0 * $0 }
    .reduce(0, +)
print(result)  // 4 + 16 + 36 = 56

Плоское отображение, затем compactMap

Сначала развернём последовательность, затем оставим только значения, которые можно разобрать:

let rows = [["1", "x"], ["3", "4"]]
let nums = rows
    .flatMap { $0 }
    .compactMap { Int($0) }
print(nums)  // [1, 3, 4]

Как сохранить цепочки понятными

Размещайте каждый шаг на отдельной строке и присваивайте имена промежуточным результатам, если цепочка становится длинной. Понятность важнее попытки уместить всё в одном выражении.

let names = ["ann", "BO", "cy"]
let titled = names
    .map { $0.lowercased() }
    .map { $0.capitalized }
    .sorted()
print(titled)  // ["Ann", "Bo", "Cy"]

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

Что возвращает [[1, 2], [3]].flatMap { $0 }?

Повторение

Вы изучили объединение последовательностей и построение цепочек:

  • flatMap раскрывает один уровень вложенных последовательностей
  • Используйте compactMap, а не flatMap, чтобы удалять необязательные значения
  • Объединяйте filter / map / flatMap / reduce в понятные конвейеры
  • Один шаг на строку помогает сохранить ясность длинных цепочек

Курс завершён! Далее: ленивые последовательности.

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

Урок «flatMap и цепочки» бесплатный?

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

Чему я научусь в уроке «flatMap и цепочки»?

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

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

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

Сколько времени занимает урок «flatMap и цепочки»?

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

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

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

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

  1. map и compactMap
  2. filter и предикаты
  3. reduce и reduce(into:)
  4. flatMap и цепочки
← Назад к Swift Academy