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] = voted_up_users.count -voted_down_users.count #line one
    hash_answers[index+1] = ans.created_at # line 2
  end
end

2行目ではなくコードに1行目しかない場合は、以下のコードで問題なく動作します

     @answers = hash_answers.sort_by { |key, value| value }.reverse

しかし、私もそれをcraeted_atでソートしたいと思います

これを達成する方法、または別の方法でハッシュを作成する方法

どんな助けでも大歓迎です

ありがとう

4

2 に答える 2

1
answers.sort_by do |ans|
  [ans.net_votes, ans.created_at]
end

次に、Answersクラスで

def net_votes
  votes_up_by_all_users - votes_down_by_all_users
end

のように、オブジェクトを変数としてそれ自体に渡す必要はありませんans.votes_up_by_all_users(ans)。オブジェクトは常に自分自身について知っています。

于 2012-09-05T20:28:47.863 に答える
0

通常、これらのものの配列を作成し、それを並べ替えキーとして使用することで、いくつかのものを並べ替えることができます。

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

これは、最初にソート可能な構造を持っているかどうかに依存します。2つのまったく異なるものを同じハッシュに詰め込んでいます。より良いアプローチは次のとおりです。

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

配列内の要素の順序を調整して、正しい順序で並べ替えることができます。

于 2012-09-05T20:30:53.710 に答える