Reputation: 6475
I am trying to find the intersection values between multiple arrays.
for example
code1 = [1,2,3]
code2 = [2,3,4]
code3 = [0,2,6]
So the result would be 2
I know in PHP you can do this with array_intersect
I wanted to be able to easily add additional array so I don't really want to use multiple loops
Any ideas ?
Thanks, Alex
Upvotes: 86
Views: 42158
Reputation: 9238
Ruby 2.7 introduced Array#intersection method to match the more succinct Array#&.
So, now, [1, 2, 3] & [2, 3, 4] & [0, 2, 6]
can be rewritten in a more verbose way, e.g.
[1, 2, 3].intersection([2, 3, 4]).intersection([0, 2, 6])
# => [2]
[1, 2, 3].intersection([2, 3, 4], [0, 2, 6])
# => [2]
Upvotes: 5
Reputation: 3663
If you want a simpler way to do this with an array of arrays of unknown length, you can use 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]
Upvotes: 57