В Ruby, есть ли способ легко удалить только 1 совпадение в массиве? - PullRequest
19 голосов
/ 19 января 2011

В Ruby вычитание массива или reject

>> [1,3,5,7,7] - [7]
=> [1, 3, 5]

>> [1,3,5,7,7].reject{|i| i == 7}
=> [1, 3, 5]

удалит все записи в массиве.Легко ли удалить только 1 вхождение?

Ответы [ 3 ]

26 голосов
/ 19 января 2011
>> a = [1,3,5,7,7]

>> a.slice!(a.index(7))
=> 7

>> a
=> [1,3,5,7]
13 голосов
/ 19 января 2011

Лучшее, что я могу придумать:

found = false
[1,3,5,7,7].reject{|i| found = true if !found && i == 7}

Или разрушительно:

arr = [1, 2, 3, 5, 7, 7]
arr.delete_at( arr.index(7))
arr #=> [1, 2, 3, 5, 7]
0 голосов
/ 19 января 2011

Хотя это не дает прямого ответа на ваш вопрос, uniq может быть тем, что вы хотите.

[1,3,5,7,7].uniq # => [1,3,5,7]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...