May 11, 2021
This blog is part of our Ruby 3.1 series.
Ruby 3.1 introduces the Array#intersect? method which returns boolean value
true or false based on the given input arrays have common elements in it.
We already know Array#intersection or Array#& methods which are used to find the common elements between arrays.
=> x = [1, 2, 5, 8]
=> y = [2, 4, 5, 9]
=> z = [3, 7]
=> x.intersection(y) # x & y
=> [2, 5]
=> x.intersection(z) # x & z
=> []
The intersection or & methods return an empty array or array having the
common elements in it as result. We have to further call empty?, any? or
blank? like methods to check whether two arrays intersect each other or not.
=> x.intersection(y).empty?
=> false
=> (x & z).empty?
=> true
=> (y & z).any?
=> false
=> x.intersect?(y)
=> true
=> y.intersect?(z)
=> false
The Array#intersect? method accepts only single array as argument, but
Array#intersection method can accept multiple arrays as arguments.
=> x.intersection(y, z) # x & y & z
=> []
The newly introduced intersect? method is faster than the above described
checks using intersection or & since the new method avoids creating an
intermediate array while evaluating for common elements. Also new method returns
true as soon as it finds a common element between arrays.
Here's the relevant pull request and feature discussion for this change.
If this blog was helpful, check out our full blog archive.