2017-07-17 76 views
2

我有一個表關注,其中每個記錄都有屬性user_idfollower_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)]

ie;

[[1,[A,B]][2,[B,D]],[3,C],[4,A]] 

這裏user_id = 1有兩個隨從A,Buser_id = 2有兩個隨從B,D

如何做到這一點?

+0

https://ruby-doc.org/core- 2.4.1/Enumerable.html - 它有很多有用的方法。特別是你可以在這裏使用的'group_by'。 –

+0

是@SergioTulentsev是對的。你需要使用group by。 – Vishal

回答

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"]]] 
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 
+1

這實際上正是「group_by」在底層所做的。 –

+0

是的。但'&:'混淆了大多數新手開發者,所以我代表了一些簡單的解決方案。 –