filter и предикаты
Выбирайте элементы, удовлетворяющие условию.
«filter и предикаты» — бесплатный урок Swift Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Swift Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Swift Academy содержит 4 уроков всего.
Что такое filter
filter оставляет только те элементы, для которых замыкание (предикат) возвращает true.
- Замыкание возвращает значение типа
Bool - Тип элементов не изменяется
- Результатом становится новый, возможно меньший массив
Простая фильтрация
Оставим только чётные числа:
let numbers = [1, 2, 3, 4, 5, 6]
let evens = numbers.filter { $0 % 2 == 0 }
print(evens) // [2, 4, 6]Фильтрация строк
Оставим только слова длиннее трёх символов:
let words = ["hi", "swift", "go", "filter"]
let long = words.filter { $0.count > 3 }
print(long) // ["swift", "filter"]Что такое predicate
predicate — это просто функция, которая принимает значение и возвращает Bool. filter вызывает Ваш predicate один раз для каждого элемента и оставляет значение, если predicate возвращает true.
Именованный predicate
Предикаты можно сохранять и повторно использовать для большей понятности:
let isPositive: (Int) -> Bool = { $0 > 0 }
let data = [-2, 5, -1, 8]
print(data.filter(isPositive)) // [5, 8]Объединение условий
Используйте логические операторы внутри предиката:
let nums = [1, 2, 3, 4, 5, 6, 7, 8]
let picked = nums.filter { $0 % 2 == 0 && $0 > 4 }
print(picked) // [6, 8]Фильтрация структур
Отфильтруйте коллекцию объектов модели по свойству:
struct Product { let name: String; let price: Int }
let items = [Product(name: "Pen", price: 2), Product(name: "Bag", price: 40)]
let cheap = items.filter { $0.price < 10 }
print(cheap.map { $0.name }) // ["Pen"]filter и отображение
Они отвечают на разные вопросы: filter выбирает, какие элементы оставить, а отображение изменяет каждый элемент. Типы результатов различаются:
let n = [1, 2, 3, 4]
print(n.filter { $0 > 2 }) // [3, 4] (subset, same type)
print(n.map { $0 > 2 }) // [false, false, true, true]Объединение filter и отображения
Сначала выполните фильтрацию, чтобы уменьшить объём работы, а затем преобразуйте данные:
let nums = [1, 2, 3, 4, 5, 6]
let result = nums
.filter { $0 % 2 == 0 }
.map { $0 * $0 }
print(result) // [4, 16, 36]Подсчёт без сохранения элементов
Если Вам нужно только количество, подойдёт filter(...).count, но count(where:) позволяет не создавать массив:
let votes = [true, false, true, true]
let yes = votes.filter { $0 }.count
print(yes) // 3Фильтрация словаря
Применение filter к словарю возвращает словарь с подходящими парами ключ/значение:
let ages = ["Ann": 30, "Bo": 17, "Cy": 22]
let adults = ages.filter { $0.value >= 18 }
print(adults.keys.sorted()) // ["Ann", "Cy"]Быстрая проверка
Что должен возвращать predicate функции filter?
Повторение
Вы изучили фильтрацию:
filterоставляет элементы, для которых predicate равенtrue- predicate — это любая функция, преобразующая значение в
Bool - Тип элементов сохраняется, но массив может уменьшиться
- Условия можно объединять с помощью
&&/||и соединять в цепочку сmap
Далее: свёртка.
Часто задаваемые вопросы
Урок «filter и предикаты» бесплатный?
Да — полный текст урока «filter и предикаты» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Swift Academy, подпишись на CoddyKit PRO. Курс Swift Academy содержит 4 уроков всего.
Чему я научусь в уроке «filter и предикаты»?
Выбирайте элементы, удовлетворяющие условию. Ты практикуешь Swift Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Swift Academy?
Предыдущий опыт не требуется. Swift Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «filter и предикаты»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Swift Academy?
Да. Каждый урок Swift Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- map и compactMap
- filter и предикаты
- reduce и reduce(into:)
- flatMap и цепочки