Menu
Coddy logo textTech

Select и Reject

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

Метод select возвращает новый массив, содержащий только те элементы, для которых блок возвращает истинное значение. Так в Ruby обозначается «фильтрация».

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"]
challenge icon

Задание

Новичок

Прочитайте список целых чисел, разделённых запятыми. Выведите две строки:

  1. Числа, большие 10 (используйте select), соединённые с помощью ,
  2. Числа, не делящиеся на 3 без остатка (используйте reject), соединённые с помощью ,

Для входных данных 3,7,12,15,20 результатом будет:

12, 15, 20
7, 20

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

numbers = gets.chomp.split(",").map(&:to_i)

# TODO: строка 1, numbers > 10, соединённые через ", "
# TODO: строка 2, numbers НЕ делящиеся на 3, соединённые через ", "
quiz iconПроверьте себя

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

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

Потренируйтесь самостоятельно: Онлайн-компилятор Ruby