2012-09-06 71 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

相關問題