# Array equality question

**URL:** <https://www.ruby-forum.com/t/array-equality-question/83003>\
**Category:** Ruby\
**Created:** [January 22, 2007, 11:31pm UTC](https://www.ruby-forum.com/t/array-equality-question/83003 "2007-01-22T23:31:04Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Chris\_McMahon](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/74df32/32.png) [@Chris\_McMahon](https://www.ruby-forum.com/u/Chris_McMahon)\
**Post date:** [January 22, 2007, 11:31pm UTC](https://www.ruby-forum.com/t/array-equality-question/83003/1 "2007-01-22T23:31:04Z")

</div>

This took me by surprise:

irb(main):001:0\> a1 = [‘x’,‘y’,‘z’]  
=\> [“x”, “y”, “z”]  
irb(main):002:0\> a2 = [‘y’,‘z’,‘x’]  
=\> [“y”, “z”, “x”]

irb(main):008:0\> puts “yo” if a1 == a2  
=\> nil  
irb(main):009:0\> puts “yo” if a1 != a2  
yo  
=\> nil

I assumed order of elements would not be considered for equality. Is  
there any particular reason for this behavior?

---

<div class="post-metadata">

**Author:** ![Chris\_McMahon](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/74df32/32.png) [@Chris\_McMahon](https://www.ruby-forum.com/u/Chris_McMahon)\
**Post date:** [January 22, 2007, 11:41pm UTC](https://www.ruby-forum.com/t/array-equality-question/83003/2 "2007-01-22T23:41:05Z")

</div>

On 22.01.2007 23:27, Chris McMahon wrote:

> yo  
> =\> nil
> 
> I assumed order of elements would not be considered for equality. Is  
> there any particular reason for this behavior?

Why should order not matter? An array is an _ordered_ list of elements  
as indexing by position indicates. a1[0] == a2[0] will return false,  
why then should a1 == a2 return true?

If you to ignore order you either have to compare sorted copies or  
resort to Set.

Kind regards

robert

---

<div class="post-metadata">

**Author:** ![Chris\_McMahon](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/74df32/32.png) [@Chris\_McMahon](https://www.ruby-forum.com/u/Chris_McMahon)\
**Post date:** [January 22, 2007, 11:49pm UTC](https://www.ruby-forum.com/t/array-equality-question/83003/3 "2007-01-22T23:49:07Z")

</div>

On Jan 22, 2007, at 5:30 PM, Chris McMahon wrote:

> I assumed order of elements would not be considered for equality. Is  
> there any particular reason for this behavior?

The concept of order is an integral part of what it means to be an  
Array.  
If you aren’t interested in order, then a Set is probably a better  
structure.

require ‘set’

a = [1,2,3]  
b = a.reverse  
p a == b # false  
p Set.new(a) == Set.new(b) # true

Gary W.

---

<div class="post-metadata">

**Author:** ![Chris\_McMahon](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/74df32/32.png) [@Chris\_McMahon](https://www.ruby-forum.com/u/Chris_McMahon)\
**Post date:** [January 22, 2007, 11:46pm UTC](https://www.ruby-forum.com/t/array-equality-question/83003/4 "2007-01-22T23:46:06Z")

</div>

Chris McMahon wrote:

> yo  
> =\> nil
> 
> I assumed order of elements would not be considered for equality. Is  
> there any particular reason for this behavior?

The reason for this behavior is that the creator of Ruby  
and most of its users aren’t devoid of knowledge of  
programming. An array is not a set. An array is not a  
hash (a.k.a. associative array). So of course order matters.  
Does the order in which you read the chapters of a novel  
matter? If order doesn’t matter, then why is there a ‘sort’  
method that changes the order of an array?
