我需要像数组值一样组合如下:
发件人:
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个关联企业。
也欢迎其他实施方案。谢谢!
答案 0 :(得分:1)
目的是通过查看注册表中使用其关联企业ID的次数来查找系统中的前10个关联企业。
您可以将count
与group
一起用于此类查询:
如果
count
与group
一起使用,则会返回一个哈希,其键代表汇总列,值为相应的金额: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"]]