Each с индексом
Часть раздела Основы путешествия по Ruby на Coddy — урок 66 из 88.
Иногда вам нужно знать не только элемент, с которым вы работаете, но и его позицию в массиве. Метод Ruby each_with_index предоставляет вам как сам элемент, так и его индекс за одну итерацию.
Вот как это работает:
fruits = ["apple", "banana", "cherry"]
fruits.each_with_index do |fruit, index|
puts "#{index}: #{fruit}"
endЭто выведет:
0: apple
1: banana
2: cherryОбратите внимание, что теперь блок принимает две переменные между вертикальными чертами: сначала идет элемент, а затем индекс. Индекс начинается с 0, точно так же, как при прямом доступе к элементам массива.
Это особенно полезно, когда вам нужно отобразить нумерованные списки или отслеживать позиции:
tasks = ["Buy groceries", "Clean room", "Call mom"]
tasks.each_with_index do |task, i|
puts "Task #{i + 1}: #{task}"
endПрибавляя 1 к индексу, мы создаем удобный для человека нумерованный список, начинающийся с 1 вместо 0. Метод each_with_index избавляет от необходимости вручную отслеживать переменную-счетчик, делая ваш код чище и менее подверженным ошибкам.
Задание
ЛегкоПрочитайте одну строку ввода, содержащую слова, разделенные запятыми (например, apple,banana,cherry,date).
Разделите входные данные на массив строк, затем используйте each_with_index, чтобы вывести каждый элемент в виде нумерованного списка, начиная с 1 (а не с 0).
Каждая строка должна соответствовать следующему формату: Item 1: apple
Например, если на вход подается apple,banana,cherry,date, вывод должен быть следующим:
Item 1: apple
Item 2: banana
Item 3: cherry
Item 4: dateЕсли на вход подается red,green,blue, вывод должен быть следующим:
Item 1: red
Item 2: green
Item 3: blueЕсли на вход подается monday,tuesday,wednesday,thursday,friday, вывод должен быть следующим:
Item 1: monday
Item 2: tuesday
Item 3: wednesday
Item 4: thursday
Item 5: fridayЕсли на вход подается solo, вывод должен быть следующим:
Item 1: soloШпаргалка
Метод each_with_index позволяет перебирать массив, получая доступ как к элементу, так и к его индексу:
fruits = ["apple", "banana", "cherry"]
fruits.each_with_index do |fruit, index|
puts "#{index}: #{fruit}"
endВывод:
0: apple
1: banana
2: cherryБлок принимает две переменные: сначала элемент, затем индекс. Индекс начинается с 0.
Чтобы создать удобные для чтения нумерованные списки, начинающиеся с 1, прибавьте 1 к индексу:
tasks = ["Buy groceries", "Clean room", "Call mom"]
tasks.each_with_index do |task, i|
puts "Task #{i + 1}: #{task}"
endПопробуйте сами
# Прочитать ввод, разделенный запятыми
input = gets.chomp
# Разделить ввод на массив
items = input.split(",")
# TODO: Используйте each_with_index, чтобы вывести каждый элемент в виде нумерованного списка
# Помните: индекс начинается с 0, но вам нужно отображать его начиная с 1
# Формат: "Item 1: apple"В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
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Преобразование типовИтоги — Калькулятор возрастаИтоги — Истина или ложь