Задать вопрос
@eldar_web

Как сортировать и выводить уникальное содержимое хэша в Ruby?

К примеру, есть хэш:
list['first'] = 'BMW';
list['second'] = 'BMW';
list['third'] = 'MERCEDES';

Как сортировать этот хэш по уникальности???
  • Вопрос задан
  • 673 просмотра
Подписаться 2 Оценить Комментировать
Решение пользователя thepry К ответам на вопрос (3)
@thepry
Ruby on rails, 1С разработчик
UPDATE:

list = {'first' => 'BMW', 'second' => 'BMW', 'third' = 'MERCEDES'; }
А нужно мне:
list = {'first' => 'BMW', 'third' = 'MERCEDES'; }


Если пофиг какой ключ будет выбран, то
list.invert.invert => {"second"=>"BMW", "third"=>"MERCEDES"}

Если не пофиг, то
Hash[list.to_a.uniq{ |v| v.last}] => {"first"=>"BMW", "third"=>"MERCEDES"}


list['first'] = 'BMW';
list['second'] = 'BMW';
list['third'] = 'MERCEDES';

Как сортировать этот хэш по уникальности???


Хэш - это ассоциативный массив. У него нет сортировки.
Я правильно понял, что вам нужно выбрать только те пары ключ, значение, у которых значение уникально во всем хэше? Если да, то так:
h = { a: 'bmw', b: 'bmw', c: 'lada kalina' }
count = h.values.group_by(&:to_s)
h.select{ |_, v| count[v].size == 1 }  => {:c=>"lada kalina"}


Сортировать тоже можно, но получится массив:
h.sort_by{ |_, v| count[v].size } =>  [[:c, "lada kalina"], [:b, "bmw"], [:a, "bmw"]]
Ответ написан