2015-09-23 3 views

ответ

1
word_frequency.max_by { |k,v| v }.last 

Или один может сортировать:

word_frequency.sort_by { |k,v| -v } 

, а затем найти максимальное значение:

word_frequency.sort_by { |k,v| -v }.max 
#⇒ ["Ten", 2] 
word_frequency.sort_by { |k,v| -v }.max.last 
#⇒ 2 

Пожалуйста, обратите внимание, что результат ["Ten", 2] не совсем правильно, так как может быть много предметов с одинаковым счетом. Наиболее точное решение будет группа по значению и работать на результат:

# ⇓⇓⇓ this will get all 2s ⇓⇓⇓ 
word_frequency.group_by(&:last).to_a.last.first 
#⇒ 2 
+0

Спасибо за большое объяснение! Интересно, я понял. :) – thunderRX5

+0

Интересно, если я нахожу «Шесть» и «Десять», которые чаще всего являются словами в ключах. 'word_frequency.max.first' =>« Десять ». «Шесть» отсутствует? – thunderRX5

+1

'max' возвращает единственное значение. Просто используйте 'group_by', как указано в последнем фрагменте:' word_frequency.group_by (&: last) .to_a.last.last.map (&: first) '. Не совсем элегантный, но вы можете попытаться сыграть с результатом 'group_by'. – mudasobwa

1

Вы можете просто сделать

word_frequency.max_by { |k,v| v }.last 
+0

Хорошо, спасибо. Я проверю это. – thunderRX5

+0

'max' неявно преобразует хэш в массив, что приведет к сопоставлению массива. Затем он будет отсортирован по первому ключу хэша. Просто совпадение состоит в том, что '' Десять'' в алфавитном порядке является последним в ключах. – sawa

+0

Вы правы. Это работает только потому, что Десять является последней в алфавитном порядке. Поэтому мой ответ был неправильным, я его обновлю. Спасибо @sawa. – IngoAlbers

Смежные вопросы