2015-01-23 3 views
-3

У меня есть набор действий, которые я хочу сортировать на основе среднего рейтинга, и сколько раз активность была оценена.Ruby sort hash of hashes

activities = { 
    :one => { :avg_rating => 5, :total_ratings => 23 }, 
    :two => { :avg_rating => 5, :total_ratings => 18 }, 
    :three => { :avg_rating => 5, :total_ratings => 54 } 
} 

EDIT - обновляется, поэтому результаты я ожидал был правилен

Результат рода будет в порядке :three, :one, :two

Спасибо!

+0

Что означают сортируя на основе среднего балла * и * количество оценок? Как вы разорвать связи между двумя действиями, когда у вас есть лучший средний рейтинг, а другой - более общий рейтинг? –

+0

Кроме того, почему ваш список приведет к ': three,: two,: one'? Все они имеют одинаковый средний рейтинг, а ': three,: two:: one' - это не тот же порядок, если вы отсортировали по большинству итоговых оценок. –

ответ

0
activities.sort_by { |k,v| 
    [v[:avg_rating], v[:total_ratings]] 
}.reverse 

ли вам нужны имена элементов только:

activities.sort_by { |k,v| 
    [v[:avg_rating], v[:total_ratings]] 
}.reverse.map &:first 
#⇒ [ 
# [0] :three, 
# [1] :one, 
# [2] :two 
#] 
+0

Спасибо. И я понял, что поставил неправильный результат порядка сортировки, которого я тоже ожидал в своем вопросе, но вы знали, что я имел в виду !! – user1107201

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