rails-查找多个数组之间的交点


75

我试图找到多个数组之间的交集值。

例如

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

所以结果是2

我知道在PHP中可以使用array_intersect做到这一点

我希望能够轻松地添加其他数组,所以我真的不想使用多个循环

有任何想法吗 ?

谢谢亚历克斯

Answers:


118

使用Array方法设置交集。

例如:

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

@Anurag您确定这可行吗?除非我对OP的要求有误解,否则不会针对首个数组和最后一个数组进行相交测试。例如,[1,2,3] & [4,5,6] & [1,2,3]返回一个空数组。
Noz 2013年

2
@Cyle三元交集的结果中的任何元素都应存在于所有三个操作数中。见en.wikipedia.org/wiki/Intersection_(set_theory)

50

如果您希望使用更简单的方法来处理未知长度的数组,则可以使用注入。

> 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]

arrays.inject(:&)在1.9中不起作用。尽管这将起作用arrays.inject(:'&')
Iuri G.

0

Array#intersection(Ruby 2.7+)

Ruby 2.7引入了Array#intersection方法以匹配更简洁的Array#&

因此,现在[1, 2, 3] & [2, 3, 4] & [0, 2, 6]可以用更详细的方式进行重写,例如

[1, 2, 3].intersection([2, 3, 4]).intersection([0, 2, 6])
# => [2]

[1, 2, 3].intersection([2, 3, 4], [0, 2, 6])
# => [2]
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.