Срезы массивов через диапазоны
Часть раздела Основы путешествия по Ruby на Coddy — урок 69 из 88.
Иногда вам нужно извлечь часть массива, а не обращаться к отдельным элементам. Ruby позволяет делать срезы массивов с помощью диапазонов, что создает новый массив, содержащий только указанные вами элементы.
Чтобы сделать срез массива с помощью диапазона, поместите диапазон внутри квадратных скобок:
numbers = [10, 20, 30, 40, 50]
slice = numbers[1..3]
puts slice # Выводит: 20, 30, 40Диапазон 1..3 включает элементы с индексами 1, 2 и 3. Помните, что индексы массивов начинаются с 0, поэтому индекс 1 — это второй элемент.
Вы также можете использовать диапазон с тремя точками (...), чтобы исключить последний индекс:
letters = ["a", "b", "c", "d", "e"]
slice = letters[0...3]
puts slice # Выводит: a, b, cЗдесь 0...3 включает индексы 0, 1 и 2, но останавливается перед индексом 3.
Отрицательные индексы также работают с диапазонами. Они ведут отсчет с конца массива, где -1 — это последний элемент:
colors = ["red", "green", "blue", "yellow"]
slice = colors[1..-1]
puts slice # Выводит: green, blue, yellowЭто извлекает всё, начиная с индекса 1 и до последнего элемента, что полезно, когда вы хотите пропустить первый элемент, не зная длины массива.
Задание
ЛегкоПрочитайте два входных значения:
- Одна строка целых чисел, разделенных запятыми (например,
10,20,30,40,50,60,70) - Спецификация диапазона в формате
start..endилиstart...end(например,2..5или1...4)
Разделите первый ввод на массив целых чисел. Затем используйте диапазон из второго ввода, чтобы сделать срез массива, и выведите каждый элемент полученного среза на новой строке.
Ввод диапазона будет использовать либо две точки (..), чтобы включить конечный индекс, либо три точки (...), чтобы исключить его.
Например, если входные данные — 10,20,30,40,50,60,70 и 2..5, вывод должен быть следующим:
30
40
50
60Если входные данные — 5,10,15,20,25,30 и 0...3, вывод должен быть следующим:
5
10
15Если входные данные — 100,200,300,400,500 и 1..-1, вывод должен быть следующим:
200
300
400
500Если входные данные — a,b,c,d,e,f и -3..-1, вывод должен быть следующим:
d
e
fШпаргалка
Чтобы извлечь часть массива, используйте диапазоны внутри квадратных скобок:
numbers = [10, 20, 30, 40, 50]
slice = numbers[1..3]
# Возвращает [20, 30, 40] (индексы 1, 2 и 3)Используйте две точки (..), чтобы включить конечный индекс:
letters = ["a", "b", "c", "d", "e"]
slice = letters[0..2]
# Возвращает ["a", "b", "c"] (индексы 0, 1 и 2)Используйте три точки (...), чтобы исключить конечный индекс:
letters = ["a", "b", "c", "d", "e"]
slice = letters[0...3]
# Возвращает ["a", "b", "c"] (индексы 0, 1 и 2, останавливается перед 3)Отрицательные индексы ведут отсчет с конца массива (-1 — это последний элемент):
colors = ["red", "green", "blue", "yellow"]
slice = colors[1..-1]
# Возвращает ["green", "blue", "yellow"] (от индекса 1 до последнего элемента)Попробуйте сами
# Прочитать значения, разделенные запятыми
input_values = gets.chomp
# Прочитать спецификацию диапазона
range_spec = gets.chomp
# TODO: Напишите ваш код ниже
# 1. Разделить input_values на массив
# 2. Разобрать range_spec, чтобы определить начало, конец и использовать ли .. или ...
# 3. Сделать срез массива, используя соответствующий диапазон
# 4. Вывести каждый элемент срезанной части на отдельной строкеВ этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
4Операторы. Часть 2
Логические операторы. Часть 1Логические операторы. Часть 2Повторение — простая логикаЛогические операторы. Часть 3Логические операторы. Часть 47Калькулятор разделения счета
Приветственное сообщениеПолучение пользовательского ввода13Продвинутая работа с массивами
Срезы массивов через диапазоныСрезы массивов через индексыОператоры массивовМетод include?2Переменные и типы данных
Числа и переменныеСтроковый тип данныхЛогический тип данныхТип данных SymbolПроверка типов данныхПравила именованияПовторение: создание переменных5Принятие решений
Оператор IfКонструкция If - ElseПовторение — Простой калькуляторВложенные конструкции If - ElseОператор Unless8Циклы
Цикл For с диапазонамиЦикл WhileОператор BreakОператор NextПовторение: ФакториалЦикл TimesЦикл UntilВложенные циклыПовторение: Динамический ввод3Операторы. Часть 1
Арифметические операторыОператор остатка от деленияСокращенная арифметикаИтоги: простая математикаОператоры сравнения6Основы ввода-вывода
Вывод с помощью putsВывод с помощью print и pВывод с переменнымиВвод с помощью getsМетод chompПреобразование типовИтоги — Калькулятор возрастаИтоги — Истина или ложь