Menu
Coddy logo textTech

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 избавляет от необходимости вручную отслеживать переменную-счетчик, делая ваш код чище и менее подверженным ошибкам.

challenge icon

Задание

Легко

Прочитайте одну строку ввода, содержащую слова, разделенные запятыми (например, 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"
quiz iconПроверьте себя

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

Все уроки раздела Основы