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 に答える