Menu
Coddy logo textTech

Filter

Часть раздела Логика и управление потоком путешествия по Swift на Coddy — урок 24 из 56.

filter принимает замыкание-предикат и возвращает новый массив, содержащий только те элементы, для которых замыкание вернуло true.

let nums = [1, 2, 3, 4, 5, 6]
let evens = nums.filter { $0 % 2 == 0 }
print(evens)                 // [2, 4, 6]

Результат сохраняет исходный порядок. Тип результата соответствует входному типу, никаких преобразований не происходит, только выбор.

filter естественно сочетается с map:

let big = nums
    .filter { $0 > 2 }
    .map { $0 * $0 }
print(big)                   // [9, 16, 25, 36]

Читайте каждую цепочку сверху вниз, как конвейер. Каждый шаг создает новый массив; исходный массив остается неизменным.

challenge icon

Задание

Легко

Прочитайте две строки входных данных:

  1. Список целых чисел, разделенных запятыми
  2. Целое число min

Выведите на отдельных строках:

  1. Целые числа, которые строго больше min, соединенные через , (или пустую строку, если таких нет)
  2. Квадраты подходящих целых чисел, соединенные через ,
  3. Количество подходящих целых чисел

Используйте цепочку filter + map. Не выполняйте итерацию по входным данным дважды.

Для входных данных 1,5,2,8,3,7 в первой строке и 4 во второй строке, вывод будет следующим:

5,8,7
25,64,49
3

Шпаргалка

Используйте filter для выбора элементов, соответствующих условию:

let evens = [1,2,3,4].filter { $0 % 2 == 0 } // [2, 4]

Объединяйте filter с map в цепочку в виде конвейера:

let result = nums
    .filter { $0 > 2 }
    .map { $0 * $0 }  // [9, 16, 25, 36]

Каждый шаг возвращает новый массив; оригинал остается неизменным. Порядок сохраняется.

Попробуйте сами

let nums = readLine()!.components(separatedBy: ",").map { Int($0)! }
let min = Int(readLine()!)!

// TODO: отфильтровать > min один раз, затем возвести в квадрат; вывести оба результата, затем посчитать
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Логика и управление потоком