0

我按下面列出的顺序制作哈希,并按升序对其进行排序,但是当我想按降序对其进行排序时,我没有得到正确的结果。

哈希是这个

hash_answers = {}
unless answers.blank?
  answers.each_with_index do |ans, index|
    voted_up_users = ans.votes_up_by_all_users(ans)
    voted_down_users = ans.votes_down_by_all_users(ans)

    hash_answers[ans.id] = {
        :id => ans.id,
        :count => voted_up_users.count - voted_down_users.count,
                                       :created_at => ans.created_at
    }
  end
end

当我按升序排序created_at并计算基数时,上面的代码可以正常工作

   answers = hash_answers.sort_by { |k, v| [ v[:count] , v[:created_at] ] } 

但是我如何才能created_at根据计数按降序对该哈希进行排序。

如果有人可以帮忙谢谢

4

1 回答 1

0

您可以在排序方法中使用块,在块中您应该提供排序规则,在您的情况下可能是这样的:

temp = hash_answers.sort do |h1,h2| 
  v1 = h1.last; v2 = h2.last
  [v2[:count],v2[:created_at]] <=> [v1[:count],v1[:created_at]]
end

answer = Hash[temp]
于 2012-09-06T18:47:05.443 回答