Методы диапазонов
Часть раздела Логика и управление потоком путешествия по Ruby на Coddy — урок 7 из 56.
Диапазоны обладают удобными методами, которые избавляют вас от необходимости писать циклы вручную.
include? проверяет, попадает ли значение в диапазон:
range = 1..10
puts range.include?(5) # true
puts range.include?(11) # falsemin, max и size работают напрямую с диапазонами:
puts (1..10).min # 1
puts (1..10).max # 10
puts (1..10).size # 10step итерирует по диапазону с фиксированным шагом, что полезно, когда вам нужны не все значения:
(0..10).step(2) do |n|
puts n
end
# 0, 2, 4, 6, 8, 10И each работает так же, как и в массивах:
(1..3).each { |n| puts n * n }
# 1
# 4
# 9Задание
ЛегкоВам дан инклюзивный диапазон и список догадок. Оцените догадки и суммируйте характеристики диапазона.
Прочитайте две строки:
- Два целых числа, разделенных пробелом:
startиend_value - Список целых чисел-догадок, разделенных запятыми
Используя диапазон start..end_value, выведите:
Hit: <n>, гдеn— это количество догадок, попадающих в диапазон (используйтеinclude?)Span: <n>, гдеn— этоsizeдиапазонаMultiples of 3 sum: <n>, гдеn— это сумма всех чисел, кратных 3, в этом диапазоне (используйтеstep, начиная с первого кратного 3 числа, которое равно или большеstart)
Для входных данных 1 10 в первой строке и 3,5,11,7,-2 во второй, вывод будет следующим:
Hit: 3
Span: 10
Multiples of 3 sum: 18(Попадания (Hits): 3, 5, 7. Кратные 3 в диапазоне 1..10: 3+6+9 = 18.)
Шпаргалка
Полезные методы Range:
range = 1..10
range.include?(5) # true
range.min # 1
range.max # 10
range.size # 10step выполняет итерацию, перепрыгивая через фиксированное значение:
(0..10).step(2) { |n| puts n }
# 0, 2, 4, 6, 8, 10each работает так же, как и в массивах:
(1..3).each { |n| puts n * n }Попробуйте сами
start, end_value = gets.chomp.split.map(&:to_i)
guesses = gets.chomp.split(",").map(&:to_i)
# TODO: Количество попаданий через include?, диапазон через size, сумма кратных 3 через step
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
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Повторение: Классификатор оценок