>我有一个表Followership,其中每条记录都有属性user_id
和follower_id
。
我可以做这样的事情:
Followership.limit(10).pluck('user_id, follower_id)
但这会给我这样的结果[[1,A][2,B],[3,C],[4,A],[1,B][2,D]]
我想以这样一种方式转换上述数组,即所有具有相同user_ids
的数组都应以以下形式合并[user_id, FOLLOWER_ID(S)]
即;
[[1,[A,B]][2,[B,D]],[3,C],[4,A]]
这里user_id = 1
有两个追随者A,B
user_id = 2
有两个追随者B,D
怎么做?
正如 Sergio 所指出的,您可以将group_by
与您在pluck
之后获得的数组一起使用,例如:
arr = [[1,'A'],[2,'B'],[3,'C'],[4,'A'],[1,'B'],[2,'D']]
a.group_by(&:first).map { |k, v| [k, v.map(&:last)] }
#=> [[1, ["A", "B"]], [2, ["B", "D"]], [3, ["C"]], [4, ["A"]]]
另一种方法
a = [[1,'A'],[2,'B'],[3,'C'],[4,'A'],[1,'B'][2,'D']]
h = Hash.new { |h, k| h[k] = [] }
a.inject(h) { |sum, t| sum[t[0]] << t[1]; sum}.to_a