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

时间:2010-07-07 17:47:23

标签: ruby-on-rails ruby arrays array-intersect

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

例如

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

所以结果将是2

我在PHP中知道你可以用array_intersect

来做到这一点

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

有什么想法吗?

谢谢,Alex

3 个答案:

答案 0 :(得分:107)

使用&Array方法,用于设置交集。

例如:

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

答案 1 :(得分:44)

如果您想要一种更简单的方法来处理未知长度数组的数组,可以使用inject。

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

答案 2 :(得分: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]