Comparing two arrays ignoring element order in Ruby
Sorting the arrays prior to comparing them is O(n log n). Moreover, as Victor points out, you'll run into trouble if the array contains non-sortable objects. It's faster to compare histograms, O(n).
You'll find Enumerable#frequency in Facets, but implement it yourself, which is pretty straightforward, if you prefer to avoid adding more dependencies:
require 'facets'
[1, 2, 1].frequency == [2, 1, 1].frequency
#=> true
The easiest way is to use intersections:
@array1 = [1,2,3,4,5]
@array2 = [2,3,4,5,1]
So the statement
@array2 & @array1 == @array2
Will be true
. This is the best solution if you want to check whether array1
contains array2
or the opposite (that is different). You're also not fiddling with your arrays or changing the order of the items.
You can also compare the length of both arrays if you want them to be identical in size:
@array1.size == @array2.size && @array1 & @array2 == @array1
It's also the fastest way to do it (correct me if I'm wrong)