0Pricing
Swift Academy · Урок

Map/Filter/Reduce, ленивые последовательности

Используйте map / filter / reduce для преобразования, отбора и объединения, а затем добавляйте .lazy , чтобы отложить работу и избежать промежуточных массивов.

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

Основная идея

Основные алгоритмы:

  • преобразование: преобразовать каждый элемент
  • фильтрация: оставить элементы, соответствующие условию
  • reduce: объединить в одно значение
  • ленивый режим: отложить работу, чтобы избежать временных массивов

Преобразование

Преобразование изменяет каждый элемент и возвращает новый массив.

let nums = [1, 2, 3]
let doubled = nums.map { $0 * 2 }        // [2, 4, 6]
print(doubled)

let words = ["swift", "kit"]
let upper = words.map { $0.uppercased() } // ["SWIFT","KIT"]
print(upper)

Фильтрация

Фильтрация оставляет элементы, для которых условие возвращает значение true.

let scores = [45, 72, 88, 53]
let passing = scores.filter { $0 >= 60 } // [72, 88]
print(passing)

let names = ["Ana","Li","Max"]
let short = names.filter { $0.count <= 2 } // ["Li"]
print(short)

reduce

reduce сворачивает последовательность в один результат, используя начальное значение и замыкание для объединения.

let total = [1,2,3,4].reduce(0) { acc, x in acc + x }   // 10
print(total)

let joined = ["a","b","c"].reduce("") { $0 + $1 }             // "abc"
print(joined)

Ленивая работа по требованию

Ленивый режим создаёт отложенный конвейер: операции выполняются по мере потребления элементов (например, через prefix, first или перебор).

let range = 1...10
let lazyPipeline = range.lazy
    .map { x in print("map", x); return x * x }
    .filter { x in print("filter", x); return x % 2 == 0 }

// Only the first 3 results are needed:
let firstThree = Array(lazyPipeline.prefix(3))
print("result:", firstThree)
// Notice how only the work needed for 3 elements ran.

Советы

Советы:

  • Объединяйте преобразование → фильтрацию → reduce для ясных потоков данных.
  • Добавляйте ленивый режим, когда потребляете только часть конвейера или хотите избежать временных объектов.
  • Материализуйте результат с помощью Array(...) только тогда, когда нужен конкретный массив.

Семантика ленивого режима

Быстрая проверка: как .lazy влияет на цепочку преобразования и фильтрации?

Повторение

Повторение: используйте преобразование, чтобы изменить элементы, фильтрацию, чтобы выбрать их, и reduce, чтобы объединить. Добавляйте ленивый режим для вычисления по требованию и меньшего количества выделений памяти.

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

Урок «Map/Filter/Reduce, ленивые последовательности» бесплатный?

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

Чему я научусь в уроке «Map/Filter/Reduce, ленивые последовательности»?

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

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

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

Сколько времени занимает урок «Map/Filter/Reduce, ленивые последовательности»?

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

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

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

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

  1. Иерархии Sequence и Collection
  2. Map/Filter/Reduce, ленивые последовательности
  3. Пользовательские итераторы и советы по производительности
← Назад к Swift Academy