Я хочу получить что-то вроде этого:
a = [0,1,0,0,1,0,1,0]
a.except(1) # => [0,0,0,1,0,1,0]
a # => [0,1,0,0,1,0,1,0]
a.except(1).except(1) # => [0,0,0,0,1,0]
Как вы видите, первый элемент a
, равный аргументу except
, удаляется из a
.
Я могу сделать:
tmp_a = a.dup
tmp_a.delete_at(a.index(1))
tmp_a
но, на мой взгляд, это похоже на запах. Есть ли более элегантное однострочное решение? (Другими словами - как определить метод "except" для Array?)
UPD
Я решил эту проблему, поэтому
class Array
def except(elem)
dup.tap{|a| a.delete_at(a.index(elem))}
end
end
как вы думаете?