我有一张关注表,其中每条记录都有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
怎么做?
答案 0 :(得分:3)
作为pointed out by 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"]]]
答案 1 :(得分:0)
另一种方法
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