2016-04-14 2 views
0

Я хочу удалить (только один) элемент по значению из моего массива.ruby ​​Удалить один элемент из массива

пример:

x = [1,2,3,2] 
x.remove(2) 


result: x= [1,3] 

Но я хочу, чтобы получить [1,3,2].

благодарит

+1

при вызове '1' делать и хотите удалить определенный номер или номер первого массива? – 7urkm3n

+0

конкретный номер – ayoubben

+1

вы можете использовать '.delete_at (index of array)' для этого, или u может сохранить uniq как из '[1,2,3,4,1]', чтобы сделать его '[1,2, 3,4] '. просто позвоните 'x.uniq'. – 7urkm3n

ответ

2

Как @ 7urkm3n упоминается в комментариях, вы можете использовать x.delete_at вычеркнуть первое вхождение

x.delete_at(x.index 2) 

> x = [1,2,3,2] 
=> [1, 2, 3, 2] 
> x.delete_at(x.index 2) 
=> 2 
> x 
=> [1, 3, 2] 
+0

, что было сложно использовать 'x.index (2)' nice catch))) – 7urkm3n

+0

Я думал о perf of delete_at Vs. кусочек! ... они должны быть одинаковыми. – stecb

+0

спасибо, он работает – ayoubben

0

Вы можете использовать slice!(index, 1). Вы можете получить 1-ый индекс элемента, который вы хотите удалить, используя index(element)

В вашем случае вы просто должны сделать: x.slice!(x.index(2), 1) (или, как уже упоминалось, delete_at только предоставление индекса)

+0

, он работает, спасибо – ayoubben

0

вы Коули d написать

x = [1,2,3,2] 
x.difference([2]) 
    #=> [1, 3, 2] 

где Array#difference как я определил, что мой ответ here. Из-за широкого потенциального применения метода у меня есть proposed, который будет добавлен в ядро ​​Ruby.

Пусть

x = [1,2,3,2,1,2,4,2] 

и вы хотели бы удалить первый 1, первые два 2 «S и 4. Для этого можно было бы написать

x.difference([1,2,2,4]) 
    #=> [3, 1, 2, 2] 

Обратите внимание, что

x.difference([1,2,2,4,4,5]) 
    #=> [3, 1, 2, 2] 

дает тот же результат.

Чтобы удалить последние1, в последние два2 с и и 4, написать

x.reverse.difference([1,2,2,4]).reverse 
    #=> [1, 2, 3, 2] 
Смежные вопросы