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 — локальная установка не требуется.
Все уроки этого курса
- Иерархии Sequence и Collection
- Map/Filter/Reduce, ленивые последовательности
- Пользовательские итераторы и советы по производительности