удалить из массива, возвращая себя - PullRequest
0 голосов
/ 23 февраля 2011

Если я хочу удалить некоторые элементы из массива и вернуть себя, есть ли значения foo1 и foo2 ниже (foo2, когда нужно удалить только один элемент), правильный способ сделать это?

class Array
    def foo1 *args; delete_if{|x| args.include?(x)} end
    def foo2 arg; delete(arg); self end
end

Ответы [ 3 ]

2 голосов
/ 23 февраля 2011
class Array
 def foo3 (*args); self - args; end
end
0 голосов
/ 20 июня 2019

Это немного уродливо, но функция минус делает лаконично, вычитая один массив из другого:

ary = [1, 2, 99, 3]
ary.-([99])

или

odds = [1, 3, 5, 7, 9, 99]
ary.-(odds)

Преимущество здесь в том, что он полностью цепной (в отличие от .delete или ary - odds), поэтому вы можете делать такие вещи, как:

ary.-(odds).average

Как только ваш глаз обнаружит знак минуса, гораздо легче читать, понимать и визуально определять опечатки, чем конструкция .delete_if.

Он также хорошо работает с оператором безопасной навигации Ruby, &., если вы можете получить nil вместо массива. Это то, что вы не можете сделать элегантно с вычитанием массивов.

maybe_array&.-(odds)&.average
0 голосов
/ 27 апреля 2014
array.reject{|element| element == value_of_element_to_be_deleted}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...