Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 基于公共属性(rails)的拾取_Mysql_Ruby On Rails - Fatal编程技术网

Mysql 基于公共属性(rails)的拾取

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

我有一个表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
有两个追随者
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