Скажем, у меня есть массив [1,2,3,1,2,3]
, и я хочу удалить первый экземпляр (скажем) 2
из массива, дающего [1,3,1,2,3]
. Какой самый простой способ?
Удалить первый экземпляр соответствующего элемента из массива
Ответ 1
li.delete_at(li.index(n) || li.length)
li[li.length]
выходит за допустимые пределы, поэтому || li.length
обрабатывает случай, когда n
отсутствует в списке.
irb(main):001:0> li = [1,2,3,1,2,3]
=> [1, 2, 3, 1, 2, 3]
irb(main):002:0> li.delete_at(li.index(2) || li.length)
=> 2
irb(main):003:0> li.delete_at(li.index(42) || li.length)
=> nil
irb(main):004:0> li
=> [1, 3, 1, 2, 3]
Ответ 2
Если || li.length
следует избегать отправки nil
в li.delete_at
(что приведет к TypeError), тогда более читаемая версия может выглядеть так:
li.delete_at li.index(42) unless li.index(42).nil?
Ответ 3
Может быть, он должен стать частью stdlib:
class Array
def delete_first item
delete_at(index(item) || length)
end
end