ruby soft метод delete_if? - PullRequest
       3

ruby soft метод delete_if?

2 голосов
/ 27 декабря 2010

Когда у меня есть массив в ruby, я могу запустить на нем блок delete_if. Проблема в том, что он удаляет элементы из моего массива. Мне нужна та же функциональность, за исключением того, что я не изменяю исходный массив, а возвращаю новый массив с удаленными объектами.

Например:

myarr = ["foo", 5, 7, "bar"]
newarr = myarr.delete_if { |e| e.is_a?(String) }

вернет [5, 7] в newarr, но также внесет изменения в исходный массив, myarr.

То, что я по сути ищу, будет

myarr = ["foo", 5, 7, "bar"]
newarr = myarr.soft_delete_if { |e| e.is_a?(String) }

так что newarr будет иметь значение [5, 7], но myarr будет по-прежнему иметь те же значения.

Существует ли что-то подобное? Большое спасибо!

Ответы [ 2 ]

7 голосов
/ 27 декабря 2010

Использование reject.

> newarr = myarr.reject{ |e| e.is_a?(String) }
=> [5, 7]
> myarr
=> ["foo", 5, 7, "bar"]

Существует также связанный метод, называемый select, который работает так же, как и reject, за исключением того, что сохраняет элементы, для которых предикат возвращает true вместо их отклонения.

3 голосов
/ 27 декабря 2010

Вы хотите Array # reject .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...