0Pricing
Swift Academy · Урок

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 — локальная установка не требуется.

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

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