Mysql 基于公共属性(rails)的拾取
我有一个表Followership,其中每个记录都有属性Mysql 基于公共属性(rails)的拾取,mysql,ruby-on-rails,Mysql,Ruby On Rails,我有一个表Followership,其中每个记录都有属性user\u id和follower\u id 我可以这样做: Followership.limit(10).pluck('user_id, follower_id) 但这将给我这样的结果[[1,A][2,B],[3,C],[4,A],[1,B][2,D] 我想以这样一种方式转换上面的数组,即所有具有相同用户id的数组应以以下形式合并[用户id,跟随者id)] i、 e 这里user\u id=1有两个追随者A,B和user\u id=2
user\u id
和follower\u id
我可以这样做:
Followership.limit(10).pluck('user_id, follower_id)
但这将给我这样的结果[[1,A][2,B],[3,C],[4,A],[1,B][2,D]
我想以这样一种方式转换上面的数组,即所有具有相同用户id
的数组应以以下形式合并[用户id,跟随者id)]
i、 e
这里user\u id=1
有两个追随者A,B
和user\u id=2
有两个追随者B,D
如何做到这一点?因为,您可以使用group\u by
和pull
之后获得的数组,例如:
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
a=[[1,'a'],[2,'B'],[3,'C'],[4,'a'],[1,'B'][2,'D']]
h=Hash.new{| h,k | h[k]=[]}
a、 注入(h){| sum,t | sum[t[0]]-它有很多有用的方法。特别是,groupby
,你可以在这里使用。是的@SergioTulentsev是正确的。你需要使用groupby。这实际上正是groupby
在幕后所做的。是的。但是和:
让大多数新手开发人员感到困惑,所以我提出了一个更简单的解决方案。
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