Удаление хэшей, которые имеют одинаковые значения для определенных ключей

У меня есть Array из Hashes с теми же ключами, в которых хранятся данные людей.

Я хочу удалить хэши, которые имеют одинаковые значения для ключей :name и :surname. Остальные значения могут отличаться, поэтому вызов uniq! для массива не сработает.

Есть ли простое решение для этого?


person user1608920    schedule 03.05.2013    source источник


Ответы (3)


Вы можете передать блок в uniq или uniq!, значение, возвращаемое блоком, используется для сравнения двух записей на равенство:

irb> people = [{name: 'foo', surname: 'bar', age: 10}, 
               {name: 'foo', surname: 'bar' age: 11}]
irb> people.uniq { |p| [p[:name], p[:surname]] }
 => [{:name=>"foo", :surname=>"bar", :age=>10}]
person toro2k    schedule 03.05.2013

unique_people = {}
person_array.each do |person|
  unique_people["#{person[:name]} #{person[:surname]}"] = person
end

array_of_unique_people = unique_people.values

Это должно сработать.

person Niels B.    schedule 03.05.2013

person    schedule
comment
Я думаю что будет только уникальная фамилия. Вы хотите +, а не && внутри блока. На самом деле вы, вероятно, захотите создать массив для сравнения. - person Neil Slater; 03.05.2013
comment
Кэрол Адамс и Кэрол Дамс недовольны. - person steenslag; 03.05.2013
comment
@steenslag надеюсь, что теперь они счастливы ;) - person David Unric; 04.05.2013