@eldar_web

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

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

Как сортировать этот хэш по уникальности???
  • Вопрос задан
  • 660 просмотров
Решения вопроса 1
@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"]]
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
mainameiz
@mainameiz
Full-stack web-developer
values = []
list.keys.each do |key|
if values.include?(list[key])
list.delete(key)
else
values << list[key]
end
end
Ответ написан
Комментировать
POS_troi
@POS_troi
СадоМазо Админ, флудер, троль.
a = [ "a", "a", "b", "b", "c" ]
a.uniq   # => ["a", "b", "c"]

b = [["student","sam"], ["student","george"], ["teacher","matz"]]
b.uniq { |s| s.first } # => [["student", "sam"], ["teacher", "matz"]]

ruby-doc.org/core-2.2.0/Array.html#method-i-uniq

А вы и вправду так хэш массивы записываете?

list = {first:'BMW', seccond:'BMW', third:'MERCEDES'}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы