2012-09-06 42 views
0

我按照下面列出的顺序对散列进行排序,并按升序对其进行排序,但是当我想按降序排序时,我没有得到正确的结果。如何通过created_at和count的基数降序对散列进行排序

哈希是这样的

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降序排序这个散列这上面的代码工作正常并在计数的基础上。

帮助,如果任何人都可以 感谢

+0

哈希真的不是活得这意味着排序的数据。你确定你不能使用数组吗? –

+0

是的,这对我是必要的。 – Kashiftufail

+0

如果您需要反转订单,请对结果使用'Array#reverse'。 –

回答

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] 
+0

也许'h1.value [:count]'应该是'h1.last [:count]'? –

+0

我得到了这个错误undefined方法'价值'为# Kashiftufail

+0

@ KashifAli,你应该提供真实的数据来测试 – megas

相关问题