Как мне отсортировать хэш с наибольшим конкретным значением?

#ruby #arrays #sorting #hash #enums

#ruby #массивы #сортировка #хэш #перечисления

Вопрос:

У меня есть хэши внутри массива с elem именами, и я должен получить ключи «типа», которые имеют наибольшее значение «count».

Я знаю, что перечислители — это отличная вещь, которую нужно знать, но я не очень хорошо их понимаю.

 elem = [{"type"=>"dododo", "count"=>0, "name"=>"dododo's", "tip"=>"dododo's Level"},
  {"type"=>"dadada", "count"=>1203, "name"=>"dadada's", "tip"=>"dadada's Degree"},
  {"type"=>"dedede", "count"=>717, "name"=>"dedede's", "tip"=>"dedede's Degree"},
  {"type"=>"dididi", "count"=>6, "name"=>"dididi's", "tip"=>"dididi or Professional Degree"}]
  

Я пытаюсь это:

 elem.each do |i|
  i.each_with_index do |k,v|
    puts v["count"]
  end
end
  

но я знаю, что пропустил какой-то шаг.

Я знаю, что такого рода «маневры» довольно распространены и важны для понимания.

Комментарии:

1. Возможно, вы захотите отредактировать заголовок для записи, поскольку вы не сортируете, а тем более не сортируете хэш. Может быть, что-то вроде: «Как мне извлечь определенное значение хэша из массива хэшей?

Ответ №1:

Один из способов сделать это — использовать перечислимый#max_by

 elem = [
  {"type"=>"dododo", "count"=>0, "name"=>"dododo's", "tip"=>"dododo's Level"},
  {"type"=>"dadada", "count"=>1203, "name"=>"dadada's", "tip"=>"dadada's Degree"},
  {"type"=>"dedede", "count"=>717, "name"=>"dedede's", "tip"=>"dedede's Degree"},
  {"type"=>"dididi", "count"=>6, "name"=>"dididi's", "tip"=>"dididi or Professional Degree"}
]

max_elem = elem.max_by {|e| e['count']}
puts max_elem['type']
# returns dadada
  

Комментарии:

1. Большое спасибо @infused ! спасибо за быстрый ответ 🙂