Select и Reject
Часть раздела Логика и управление потоком путешествия по Ruby на Coddy — урок 21 из 56.
Метод select возвращает новый массив, содержащий только те элементы, для которых блок возвращает истинное значение. Так в Ruby обозначается «filter».
numbers = [1, 2, 3, 4, 5, 6]
evens = numbers.select { |n| n.even? }
puts evens.inspect # [2, 4, 6]reject является противоположностью, он сохраняет всё, для чего блок возвращает false:
odds = numbers.reject { |n| n.even? }
puts odds.inspect # [1, 3, 5]Оба возвращают новый массив; исходный массив остается неизменным.
Блок — это просто предикат, подходит всё, что вычисляется как true или false:
words = ["hi", "hello", "hey", "yo"]
long = words.select { |w| w.length >= 3 }
puts long.inspect # ["hello", "hey"]Задание
НовичокПрочитайте список целых чисел, разделенных запятыми. Выведите две строки:
- Числа больше
10(используйтеselect), объединенные через, - Числа, не кратные
3(используйтеreject), объединенные через,
Для входных данных 3,7,12,15,20 вывод будет следующим:
12, 15, 20
7, 20Шпаргалка
select возвращает новый массив с элементами, для которых блок является истинным (аналогично "filter"):
evens = [1,2,3,4].select { |n| n.even? } # [2, 4]reject является противоположностью, сохраняя элементы, для которых блок является ложным:
odds = [1,2,3,4].reject { |n| n.even? } # [1, 3]Оба метода возвращают новый массив; исходный остается неизменным.
Попробуйте сами
numbers = gets.chomp.split(",").map(&:to_i)
# TODO: строка 1, числа > 10, соединенные через ", "
# TODO: строка 2, числа, НЕ кратные 3, соединенные через ", "
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Строки в деталях
Обзор методов строкИнтерполяция строкИтерация по строкамSplit и JoinИтоги — String Weaver4Блоки, Proc и лямбды
Что такое блок?do..end против фигурных скобокКлючевое слово yieldПараметры блокаProc и лямбдыИтоги: пользовательский итератор7Хеши. Часть 2
Hash.new со значениями по умолчаниюИтерация по хешамВложенные хешиСлияние и преобразованиеИтоги — счетчик частоты10Проект — Учёт студентов
Обзор проектаДобавить студента2Диапазоны
Что такое диапазон?Методы диапазоновДиапазоны в Case / WhenПовторение — практика по диапазонам5Мощь Enumerable
Select и RejectЦепочки MapReduce / Injectcount, all?, any?, none?group_by и partitionsort_by, min_by, max_byИтоги — Data Pipeline8Продвинутые условные конструкции
Case с классами и RegexМножественные значения в whenТернарный операторОднострочные if / unlessПовторение: Классификатор оценок