Диапазоны в Case / When
Часть раздела Логика и управление потоком путешествия по Ruby на Coddy — урок 8 из 56.
Диапазоны отлично показывают себя внутри оператора case в Ruby. Там, где многим языкам требуется цепочка if/elsif с операторами сравнения, Ruby позволяет сопоставлять значение с диапазонами напрямую.
score = 78
grade = case score
when 90..100 then "A"
when 80..89 then "B"
when 70..79 then "C"
when 60..69 then "D"
else "F"
end
puts grade # CЗа кулисами when 70..79 использует оператор === диапазона, что эквивалентно (70..79).include?(score).
Форма case короче, легче читается и быстрее пишется, чем длинная лестница if/elsif.
Задание
ЛегкоПрочитайте список целых чисел (возраст), разделенных запятыми. Для каждого возраста классифицируйте его с помощью оператора case, используя диапазоны (ranges):
0..12:Child13..19:Teen20..64:Adult65или выше:Senior- Все остальное (отрицательные числа): пропускается, не попадает в отчет
Выведите строку с количеством для каждой ненулевой категории в фиксированном порядке: Child, Teen, Adult, Senior. Пропускайте категории с нулевым количеством людей. После подсчетов выведите Skipped: <n>, где n — это количество отрицательных (недопустимых) возрастов.
Для входных данных 5,15,30,70,-3,40,12 результатом будет:
Child: 2
Teen: 1
Adult: 2
Senior: 1
Skipped: 1Шпаргалка
Используйте диапазоны в операторах case — Ruby выполняет сопоставление через === (эквивалентно include?):
score = 78
grade = case score
when 90..100 then "A"
when 80..89 then "B"
when 70..79 then "C"
when 60..69 then "D"
else "F"
end
puts grade # CПопробуйте сами
ages = gets.chomp.split(",").map(&:to_i)
# TODO: классифицировать каждый возраст с помощью case + диапазонов, подсчитать количество по категориям, вывести отчет
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
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Повторение: Классификатор оценок