# Comparing and copying objects

**URL:** <https://www.ruby-forum.com/t/comparing-and-copying-objects/138856>\
**Category:** Rails\
**Created:** [May 28, 2008, 1:00pm UTC](https://www.ruby-forum.com/t/comparing-and-copying-objects/138856 "2008-05-28T13:00:25Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![johnnybutler7](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/8491ac/32.png) [@johnnybutler7](https://www.ruby-forum.com/u/johnnybutler7)\
**Post date:** [May 28, 2008, 1:00pm UTC](https://www.ruby-forum.com/t/comparing-and-copying-objects/138856/1 "2008-05-28T13:00:25Z")

</div>

Hi,

I wonder if there is a quick way to do this.

companyA has 2 employees “a”, “b”

companyB has 3 employees “a”, “b”, “c”

I basically want to merge companyA employess with companyB employees so  
when i look at companyA the employees will equal “a”, “b”, “c”

i know i could do something like companyA.employees = companyB.employees  
but this would just overwrite companyA employees so if companyA had more  
employees than companyB i would lose the employees companyA had that  
companyB didnt.

I think companyA.employees \<\< companyB.employees would just mash them  
together and give me duplicates.

The only other way i can think off is a nasty double loop that compares  
each object 1 by 1 and then starts again going through the process.

JB

---

<div class="post-metadata">

**Author:** ![johnnybutler7](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/8491ac/32.png) [@johnnybutler7](https://www.ruby-forum.com/u/johnnybutler7)\
**Post date:** [May 28, 2008, 4:11pm UTC](https://www.ruby-forum.com/t/comparing-and-copying-objects/138856/2 "2008-05-28T16:11:31Z")

</div>

should be:

companyA.employees = (companyA.employees + companyB.employees).uniq!

---

<div class="post-metadata">

**Author:** ![johnnybutler7](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/8491ac/32.png) [@johnnybutler7](https://www.ruby-forum.com/u/johnnybutler7)\
**Post date:** [May 28, 2008, 4:06pm UTC](https://www.ruby-forum.com/t/comparing-and-copying-objects/138856/3 "2008-05-28T16:06:08Z")

</div>

what about using the “+” and “uniq!” methods (associations are just  
arrays after all)?

companyA = (companyA.employees + companyB.employees).uniq!

This may be brittle because I’m counting on the fact that the  
association is an array.

On May 28, 7:00 am, John B. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

---

<div class="post-metadata">

**Author:** ![johnnybutler7](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/8491ac/32.png) [@johnnybutler7](https://www.ruby-forum.com/u/johnnybutler7)\
**Post date:** [May 28, 2008, 4:31pm UTC](https://www.ruby-forum.com/t/comparing-and-copying-objects/138856/4 "2008-05-28T16:31:39Z")

</div>

Thanks for correcting the "un. The | operator is more succinct. Thanks  
Fred.

---

<div class="post-metadata">

**Author:** ![johnnybutler7](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/8491ac/32.png) [@johnnybutler7](https://www.ruby-forum.com/u/johnnybutler7)\
**Post date:** [May 28, 2008, 4:22pm UTC](https://www.ruby-forum.com/t/comparing-and-copying-objects/138856/5 "2008-05-28T16:22:49Z")

</div>

On 28 May 2008, at 15:05, Hardbap wrote:

> what about using the “+” and “uniq!” methods (associations are just  
> arrays after all)?
> 
> companyA = (companyA.employees + companyB.employees).uniq!
> 
> This may be brittle because I’m counting on the fact that the  
> association is an array.

It also won’t work as uniq! returns nil if there are no duplicates.  
Use uniq instead.  
There’s also the | operator  
irb(main):005:0\> [1,2,3]|[1,2,3,4,5]  
=\> [1, 2, 3, 4, 5]

Fred
