2010-07-07 67 views
56

我正在嘗試查找多個數組之間的交集值。rails - 查找多個數組之間的交集

例如

code1 = [1,2,3] 
code2 = [2,3,4] 
code3 = [0,2,6] 

那麼結果將是2

我知道PHP可以用array_intersect

我希望能夠輕鬆地添加額外的數組所以我不這樣做真的不想使用多個循環

任何想法?

謝謝,亞歷克斯

回答

89

使用Array&方法,該方法是用於交集。

例如:

> [1,2,3] & [2,3,4] & [0,2,6] 
=> [2] 
+0

@Anurag你確定這家公司有效嗎?除非我誤解OP的要求,否則第一個和最後一個數組不會針對彼此進行交叉測試。例如,'[1,2,3]&[4,5,6]&[1,2,3]'返回一個空數組。 – Noz 2013-04-23 18:56:46

+0

@Cyle三個交點結果中的任何元素都應該存在於所有三個操作數中。見http://en.wikipedia.org/wiki/Intersection_(set_theory) – bdares 2013-04-24 02:36:42

34

如果你想與未知長度的數組的數組更簡單的方式做到這一點,你可以使用注射。

> arrays = [code1,code2,code3] 
> arrays.inject(:&)     # Ruby 1.9 shorthand 
=> [2] 
> arrays.inject{|codes,x| codes & x } # Full syntax works with 1.8 and 1.9 
=> [2] 
+0

'arrays.inject(:&)'在1.9中不起作用。這將工作,雖然'array.inject(:'&')' – 2013-04-18 16:36:45

+0

'arrays.inject(:&)'適用於1.9(1.9.3p429) – Florent2 2014-10-31 15:27:27