2017-02-13 6 views
0

Я использую Rails 5 и рубин 2.4 У меня есть массив объектов, причем каждый объект имеет полеКак удалить повторяющиеся атрибуты из массива на основе полей объектов в массиве?

name 
member_id 

Я хочу, чтобы сканировать мой массив и устранить дублирующие элементы, TAHT есть элементы, чьи поля «имя "и" member_id "уже соответствуют чему-то еще в массиве. Как мне это сделать? Я понимаю, что я могу проверить, если массив уже содержит элемент, используя

results.any?{|a| a.name.eql?(name) && a.member_id == member_id} 

Но я не уверен в том, как использовать выше для устранения дубликатов. Кроме того, если есть дубликаты, я все же хочу сохранить один из элементов с уникальной комбинацией name/member_id.

+0

It 'd help, если вы предоставили входные данные и ожидаемый результат. Пожалуйста, прочитайте «[mcve]». –

ответ

0

Ruby's uniq - это вариант. Например, предположим, что я хочу, чтобы сравнить элементы подрешетки в дальнейшем их значениями в субиндексов 0 и 2. Я могу создать объект сравнения, состоящий из этих элементов и использовать его с uniq «s блок опции:

a = [ 
    ['one', 1, 1], 
    ['two', 2, 2], 
    ['one', 2, 1], 
    ['two', 2, 2], 
    ['one', 1, 2], 
] 

p a.uniq { |elt| [elt[0], elt[2]] } # => [["one", 1, 1], ["two", 2, 2], ["one", 1, 2]] 
Смежные вопросы