.select(:attribute)并按频率对它们进行排名

时间:2014-01-22 15:15:54

标签: ruby-on-rails activerecord ruby-on-rails-4 nested-attributes

让我们说在我的rails应用程序中,我有50个不同的Topics,每个都标有topic_id。我们还要说,以下查询会返回50个帖子,并从每个帖子中选择topic_id

Post.where(id: something).select(:topic_id)

如何排名最常出现在此查询中的前5 topic_ids

1 个答案:

答案 0 :(得分:0)

这有效,但可能有更有效的方法 - 随意提出建议,我是新人!

[1,2,2,2,3,4,5,6,6,6,6].group_by{|x| x}.sort_by{|k,v| -v.size}[0..4][0..4].map{|arr| arr[0] }

对值进行分组,按组的大小排序,然后从结果数组中提取topic_ids。结果是按频率排序的topic_ids数组。