将数组值合并到新的分组数组?

时间:2014-08-21 01:08:39

标签: ruby-on-rails ruby arrays postgresql activerecord

我需要像数组值一样组合如下:

发件人:

arr = ['abc', 'abc', 'eff', 'eff', 'foo', 'bar', 'bar', 'bar']

merged_like_arr = [ ['abc', 'abc'], ['eff', 'eff'], ['foo'], ['bar', 'bar', 'bar']]

基本上有一个ActiveRecord对象,它按顺序返回一组记录。

aff=Registration.order('affiliate DESC')
aff.map{|code| code. affiliate }
  # produces the following:
  # arr = ['abc', 'abc', 'eff', 'eff', 'foo', 'bar', 'bar', 'bar']

我需要将数据格式arr更改为merged_like_arr(如上所示),以便我可以这样做:

merged_like_arr.sort_by{|arr|-arr.size}.first(10)
 #=> [ ["bar", "bar", "bar"], ["eff", "eff"], ["abc", "abc"] ... ] 

目的是通过查看注册表中使用其关联企业ID的次数来查找系统中的前10个关联企业。

也欢迎其他实施方案。谢谢!

2 个答案:

答案 0 :(得分:1)

  

目的是通过查看注册表中使用其关联企业ID的次数来查找系统中的前10个关联企业。

您可以将countgroup一起用于此类查询:

  

如果countgroup一起使用,则会返回一个哈希,其键代表汇总列,值为相应的金额:

Person.group(:city).count
# => { 'Rome' => 5, 'Paris' => 3 }

在你的情况下:

Registration.group(:affiliate).count
#=> { 'abc' => 2, 'eff' => 2, 'foo' => 1, 'bar' => 3 }

答案 1 :(得分:0)

这应该有效:

arr = ['abc', 'abc', 'eff', 'eff', 'foo', 'bar', 'bar', 'bar']

arr = arr.group_by { |e| e }.values
# => [["abc", "abc"], ["eff", "eff"], ["foo"], ["bar", "bar", "bar"]]