# Arrays of Model Objects, Intersections, Object Identificatio

**URL:** <https://www.ruby-forum.com/t/arrays-of-model-objects-intersections-object-identificatio/55103>\
**Category:** Rails\
**Created:** [March 16, 2006, 11:47pm UTC](https://www.ruby-forum.com/t/arrays-of-model-objects-intersections-object-identificatio/55103 "2006-03-16T23:47:35Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![DSTaylor\_S](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/b38774/32.png) [@DSTaylor\_S](https://www.ruby-forum.com/u/DSTaylor_S)\
**Post date:** [March 16, 2006, 11:47pm UTC](https://www.ruby-forum.com/t/arrays-of-model-objects-intersections-object-identificatio/55103/1 "2006-03-16T23:47:35Z")

</div>

Hi all,

Hope you can help me with understanding how Ruby / Rails treats arrays  
full  
of objects.

Let’s say I have to arrays of objects. Both are the same kinds of  
objects.

tomatoes = Fruit.find(:all, :conditions =\> [‘tomato = ?’, true], :limit  
=\>  
10)  
fruits = Fruit.find(:all, :limit =\> 10)

And I want to create an array of these objects called @my\_fruits, but I  
don’t want the set to contain any duplicates.

In the Ruby API documentation for arrays it shows you can use the |  
operator  
to perform a union between two arrays, throwing out duplicates.

OK. That sounds good. That’s what I want.

@my\_fruits = tomatoes | fruits

98% of the time I’ve found this works in my tests. I don’t get  
duplicates.  
But I’ve had instances where I do in fact have a row repeat.

Any ideas as to why the union operator doesn’t work in this case?

In my real world ™ example, I’m sorting the database rows randomly,  
and  
the data changes frequently. Both arrays contain the same types of  
objects.  
In entirely likely that two arrays can contain the same object.

Is there a performance hit in building an each loop on the likely  
smaller of  
the array to test whether the other array ".include?"s the object? Would  
this be considered more reliable?

Example:  
@my\_fruits = fruits  
tomatoes.each do | fruit |  
@my\_fruits.push(fruit) unless @my\_fruits.include?(fruit)  
end

Why?

Thanks.  
D. Taylor S.,  
Reality Technician

---

<div class="post-metadata">

**Author:** ![DSTaylor\_S](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/b38774/32.png) [@DSTaylor\_S](https://www.ruby-forum.com/u/DSTaylor_S)\
**Post date:** [March 16, 2006, 11:59pm UTC](https://www.ruby-forum.com/t/arrays-of-model-objects-intersections-object-identificatio/55103/2 "2006-03-16T23:59:41Z")

</div>

Hi…

Have you tried the uniq! method for arrays? (ruby 1.84)  
[http://corelib.rubyonrails.org/classes/Array.html#M000452](http://corelib.rubyonrails.org/classes/Array.html#M000452)

Something like

@myarray.uniq!

Hope this works for you

---

<div class="post-metadata">

**Author:** ![DSTaylor\_S](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/b38774/32.png) [@DSTaylor\_S](https://www.ruby-forum.com/u/DSTaylor_S)\
**Post date:** [March 20, 2006, 4:35pm UTC](https://www.ruby-forum.com/t/arrays-of-model-objects-intersections-object-identificatio/55103/3 "2006-03-20T16:35:31Z")

</div>

I figured this out in a duh moment this morning. One array was formed  
through traditional ActiveRecord find methods and the other was  
constructed  
with a find\_by\_sql string that included a join table in the select. The  
inclusion of the join table made the objects appear as different between  
the  
two sets. Sanity reset.

Thanks for the suggestions.

D. Taylor S.,  
Reality Technician
