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]Читайте каждую цепочку сверху вниз, как конвейер. Каждый шаг создает новый массив; исходный массив остается неизменным.
Задание
ЛегкоПрочитайте две строки входных данных:
- Список целых чисел, разделенных запятыми
- Целое число
min
Выведите на отдельных строках:
- Целые числа, которые строго больше
min, соединенные через,(или пустую строку, если таких нет) - Квадраты подходящих целых чисел, соединенные через
, - Количество подходящих целых чисел
Используйте цепочку 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 один раз, затем возвести в квадрат; вывести оба результата, затем посчитать
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Строки в деталях
Подсчет и индексыРегистр и удаление пробеловПоиск в строкахРазделение и объединениеЗамена подстрокИтоги — Проверка имени пользователя4Множества
Создание множествОбъединение и пересечениеРазность и симметрическая разностьПодмножество и надмножествоИтоги — Фильтр тегов7Проект — Трекер привычек
Обзор проектаОтметить выполнение10Проект — Движок викторины
Обзор проектаЗадаем вопросы2Диапазоны и шаги
Закрытые и полуоткрытыеШагМетоды диапазоновДиапазоны в SwitchИтоги: Сетка календаря