【问题标题】:Sort an array of objects by number of occurrences and remove duplicates按出现次数对对象数组进行排序并删除重复项
【发布时间】:2023-03-13 03:40:02
【问题描述】:

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) 数组进行排序?

【问题讨论】:

    标签: ruby-on-rails ruby arrays sorting


    【解决方案1】:
    {"#foo"=>25, "#foobar"=>40, "#foobarbaz"=>15}.sort_by { |k, v| -v }.map(&:first)
    

    【讨论】:

    • 我应该更清楚一点 - 我不想对 counter 进行排序,而是对唯一结果数组进行排序。
    • @ChrisCashwell 你有没有运行过代码?罗斯的第一个答案确实返回了您正在寻找的内容。
    • @DigitalRoss 谢谢。这是完美的。
    猜你喜欢
    • 2021-11-20
    • 2021-12-18
    • 1970-01-01
    • 2014-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-31
    • 2017-04-27
    相关资源
    最近更新 更多