```On Thu, 23 Nov 2006, Daniel N wrote:

> I want to check to see if two arrays contain the same values.
> That is, are they the same array but not in the same order.
>
> Example
> equal
> [1,2,3,4,"abc"] should equal [2,3,1,"abc",4]  and all the other different
> orders that are possible
>
> This should not be equal
> [1,2,3] and [1,1,2,3]
> [1,2,3,nil] and [nil, nil, nil, 1,2,1,3,2]
>
> At first I thought of
> (( array1 | array2 ) - array1).size == 0
>
> but this does not take into account duplicate values and the should not
> equals do equal :(.  In fact I have not been able work out how to use any of
> the standard array, or Enumerable methods in such a way I can check if two
> arrays contain the same values as well as taking into account duplicates.
>
> Any pointers?

maybe i mis-undestand, but why wouldn't you use a hashlist?

harp:~ > cat a.rb
def content_eq a, b
ah = Hash.new{|h,k| h[k] = []} and a.each{|x| ah[x] << x}
bh = Hash.new{|h,k| h[k] = []} and b.each{|x| bh[x] << x}
ah == bh
end

pairs = [
[ [1,2,3,4,"abc"], [2,3,1,"abc",4]            ],
[ [1,2,3],         [1,1,2,3]                  ],
[ [1,2,3,nil],     [nil, nil, nil, 1,2,1,3,2] ],
]

pairs.each{|a,b| puts "content_eq(#{ a.inspect }, #{ b.inspect }) #=> #{ content_eq a, b }"}

harp:~ > ruby a.rb
content_eq([1, 2, 3, 4, "abc"], [2, 3, 1, "abc", 4]) #=> true
content_eq([1, 2, 3], [1, 1, 2, 3]) #=> false
content_eq([1, 2, 3, nil], [nil, nil, nil, 1, 2, 1, 3, 2]) #=> false

??

-a
--
my religion is very simple.  my religion is kindness. -- the dalai lama

```