Передайте результат Array#find_index
в Array#delete_at
:
>> arr.delete_at(arr.find_index(3))
>> arr
=> [1, 1, 2, 2, 3, 4, 5]
find_index()
возвращает индекс массива первого элемента, который соответствует его аргумент. delete_at()
удаляет элемент из массива по указанному индексу.
Чтобы предотвратить delete_at()
поднимая TypeError
, если индекс не найден, вы можете использовать &&
конструкцию, чтобы присвоить результат find_index()
переменной и использовать эту переменную в delete_at()
, если это не nil
. Правая сторона &&
не будет выполняться вообще, если левая сторона равна false
или nil
.
>> (i = arr.find_index(3)) && arr.delete_at(i)
=> 3
>> (i = arr.find_index(6)) && arr.delete_at(i)
=> nil
>> arr
=> [1, 1, 2, 2, 3, 4, 5]
Вы должны проверить, что аргумент 'find_index' включен в массив, иначе' delete_at' вызывает 'TypeError', потому что его аргумент' nil'. – toro2k
@ toro2k Действительно. Альтернатива, добавленная выше, которая позволяет избежать TypeError –
. Более компактным способом может быть 'arr.delete_at (arr.index (3) || arr.size)'. – toro2k