Каноническая массив отличие, например, в Рубине:Рубин массив вычитание без удаления элементов больше, чем когда-то
[ 1, 1, 2, 2, 3, 3, 4, 5 ] - [ 1, 2, 4 ] #=> [ 3, 3, 5 ]
Какой самый лучший способ, чтобы получить следующее поведение вместо этого?
[ 1, 1, 2, 2, 3, 3, 4, 5 ].subtract_once([ 1, 2, 4 ]) #=> [ 1, 2, 3, 3, 5 ]
То есть только первый экземпляр каждого совпадающего элемента во втором массиве удаляется из первого массива.
Я собираюсь принять это, но было бы неплохо, если бы аргумент мог содержать повторяющиеся значения, которые будут применяться в свою очередь (они становятся раздавленными преобразованием в Set). Не уверен, как вы можете сохранить дубликаты, сохраняя при этом производительность. (Также я хотел принять массив, а не значения как отдельные аргументы, но это простое изменение). –
Я обновил ответ с помощью версии, которая применяет обманки столько раз, сколько они присутствуют в другом массиве. – glebm
@glebm блестящий решение человек! Это очень помогло мне. Вы написали это просто, чтобы ответить на этот вопрос? Огромное спасибо. –