Ruby: поиск нескольких индексов в массиве для определенного значения

В Ruby существует несколько методов, которые можно использовать для поиска нескольких индексов в массиве для определенного значения. Эта функция может быть полезна, когда вам нужно найти все вхождения определенного элемента в массиве. В этой статье блога мы рассмотрим различные методы с разговорными объяснениями и предоставим примеры кода, которые помогут вам понять каждый подход. Давайте погрузимся!

Метод 1: цикл each_with_index
Метод each_with_indexпозволяет перебирать каждый элемент массива, одновременно отслеживая его индекс. Вы можете использовать этот метод, чтобы найти все индексы данного значения.

def find_indices(array, value)
  indices = []
  array.each_with_index do |element, index|
    indices << index if element == value
  end
  indices
end
# Usage
array = [1, 2, 3, 2, 4, 2, 5]
value = 2
indices = find_indices(array, value)
puts indices.inspect
# Output: [1, 3, 5]

Метод 2: Метод map.with_index
Метод map.with_indexаналогичен each_with_index, но возвращает новый массив с результатами блока. Вы можете использовать этот метод для создания нового массива, содержащего индексы всех вхождений определенного значения.

def find_indices(array, value)
  indices = array.map.with_index { |element, index| index if element == value }.compact
end
# Usage
array = [1, 2, 3, 2, 4, 2, 5]
value = 2
indices = find_indices(array, value)
puts indices.inspect
# Output: [1, 3, 5]

Метод 3: Метод each_index
Метод each_indexпозволяет напрямую перебирать индексы массива. Вы можете использовать этот метод в сочетании с условными операторами, чтобы найти все индексы определенного значения.

def find_indices(array, value)
  indices = []
  array.each_index do |index|
    indices << index if array[index] == value
  end
  indices
end
# Usage
array = [1, 2, 3, 2, 4, 2, 5]
value = 2
indices = find_indices(array, value)
puts indices.inspect
# Output: [1, 3, 5]