按出现次数对对象数组进行排序,并删除重复项

时间:2012-11-30 23:58:10

标签: ruby-on-rails ruby arrays sorting

Model.find_by_tag_name("#foo")返回一个数组:

  • 包含tag_name = "#foo"
  • 的25条记录
  • 包含tag_name = "#foobar"
  • 的40条记录
  • 包含tag_name = "#foobarbaz"
  • 的15条记录

我想计算每个唯一tag_name出现的次数,按该计数对结果进行排序,然后消除重复项。生成的顺序应为:

  1. #foobar
  2. #foo
  3. #foobarbaz
  4. 目前我正在做这样的事情以获得独特的数据和计数:

    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)按其出现的次数进行排序?

1 个答案:

答案 0 :(得分:2)

{"#foo"=>25, "#foobar"=>40, "#foobarbaz"=>15}.sort_by { |k, v| -v }.map(&:first)