1

Model.find_by_tag_name("#foo")次の配列を返します。

  • 25レコードtag_name = "#foo"
  • 40レコードtag_name = "#foobar"
  • 15レコードtag_name = "#foobarbaz"

それぞれの一意tag_nameが表示された回数をカウントし、そのカウントで結果を並べ替えてから、重複を排除したいと思います。結果の順序は次のようになります。

  1. #foobar
  2. #foo
  3. #foobarbaz

現在、ユニーク数とカウントを取得するために、次のようなことを行っています。

counter = Hash.new(0)
uniques = results.each{|tag| counter[tag.tag_name] += 1 }.uniq{|tag| tag.tag_name }

上記はになりcounter => {"#foo"=>25, "#foobar"=>40, "#foobarbaz"=>15}ます。

結果を取得し、重複排除し、カウントした後、結果として得られた一意のタグ(uniques)の配列を、それらが表示された回数で並べ替えるには、どのような方法がありますか?

4

1 に答える 1

2
{"#foo"=>25, "#foobar"=>40, "#foobarbaz"=>15}.sort_by { |k, v| -v }.map(&:first)
于 2012-12-01T00:03:39.523 に答える