Ruby array.each с неуникальными целочисленными значениями - PullRequest
0 голосов
/ 13 октября 2018

У нас есть array = [4, 2, 9, 11, 2, 16]

Тогда у нас есть

indexes = []
for i in array do 
    if i > 0 then indexes << array.find_index(i) else next end 
end

При распечатке результата возвращается [0, 1, 2, 3, 1, 5]

Проблема с четвертым индексом.Должно быть 4, но это 1, и это потому, что индексы 1 и 4 из array имеют одинаковое значение (то есть 2).

Не является ли for цикл (или .each)должен пройти все элементы один за другим?Почему это происходит?Почему он набирает второй индекс array дважды?

Ответы [ 2 ]

0 голосов
/ 13 октября 2018

array.find_index возвращает первый индекс элемента в array, соответствующий переданному значению.

Если вам нужен индекс искомого значения, то вы должны выполнять итерацию с each_with_index:

indexes = []
array.each_with_index do |value, index|
  indexes << index if value > 0
end

или более компактный (с одним выделением одного массива):

indexes = array.each_with_object([]).with_index {|(v, o), i| o << v if i > 0 }

или с возможностью множественного выделения:

indexes = array.map.with_index {|v, i| v > 0 ? i : nil }.compact

или:

indexes.map.with_index.select {|v| v.first > 0 }.map(&:last)
0 голосов
/ 13 октября 2018

Поскольку Array # find_index возвращает индекс первого элемента, который он находит в массиве.

Возвращает индекс первого объекта в ary, так что объект == к объекту.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...