# Is this a bug?

**URL:** <https://www.ruby-forum.com/t/is-this-a-bug/95082>\
**Category:** Ruby\
**Created:** [January 12, 2006, 4:55am UTC](https://www.ruby-forum.com/t/is-this-a-bug/95082 "2006-01-12T04:55:52Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![vivek](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/v/77aa72/32.png) [@vivek](https://www.ruby-forum.com/u/vivek)\
**Post date:** [January 12, 2006, 4:55am UTC](https://www.ruby-forum.com/t/is-this-a-bug/95082/1 "2006-01-12T04:55:52Z")

</div>

I have the below sample program.

a=[1,2,3,1]  
b=[1,[2,4],[5,6,3],4]  
b.flatten!  
a.push b  
a.uniq!  
puts a

The output it produces is  
1  
2  
3  
1  
2  
4  
5  
6  
3  
4

a.uniq! doesnt seem to work on the array created after appending the  
flattened b array to a.  
Note that uniq! has actually purged the last element ‘1’ in the  
original array a.It looks like  
uniq! somehow still works on the old array a and is not aware of the  
new array.  
I am using 1.8.4

Vivek

---

<div class="post-metadata">

**Author:** ![vivek](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/v/77aa72/32.png) [@vivek](https://www.ruby-forum.com/u/vivek)\
**Post date:** [January 12, 2006, 5:01am UTC](https://www.ruby-forum.com/t/is-this-a-bug/95082/2 "2006-01-12T05:01:53Z")

</div>

On Jan 11, 2006, at 8:53 PM, Vivek wrote:

> I have the below sample program.
> 
> a=[1,2,3,1]  
> b=[1,[2,4],[5,6,3],4]  
> b.flatten!  
> a.push b  
> a.uniq!  
> puts a

rb(main):001:0\> a=[1,2,3,1]  
=\> [1, 2, 3, 1]  
irb(main):002:0\> b=[1,[2,4],[5,6,3],4]  
=\> [1, [2, 4], [5, 6, 3], 4]  
irb(main):003:0\> b.flatten!  
=\> [1, 2, 4, 5, 6, 3, 4]  
irb(main):004:0\> a.push b  
=\> [1, 2, 3, 1, [1, 2, 4, 5, 6, 3, 4]]  
irb(main):005:0\> a.uniq!  
=\> [1, 2, 3, [1, 2, 4, 5, 6, 3, 4]]  
irb(main):006:0\> puts a  
1  
2  
3  
1  
2  
4  
5  
6  
3  
4  
=\> nil

Pushing b onto a does not push b’s _values_ onto a.

---

<div class="post-metadata">

**Author:** ![vivek](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/v/77aa72/32.png) [@vivek](https://www.ruby-forum.com/u/vivek)\
**Post date:** [January 12, 2006, 5:04am UTC](https://www.ruby-forum.com/t/is-this-a-bug/95082/3 "2006-01-12T05:04:53Z")

</div>

Gavin K. wrote:

> =\> [1, 2, 3, [1, 2, 4, 5, 6, 3, 4]]  
> 4  
> =\> nil
> 
> Pushing b onto a does not push b’s _values_ onto a.

ie you’d also need to flatten a after pushing on b

a=[1,2,3,1]  
b=[1,[2,4],[5,6,3],4]  
b.flatten!  
a.push b  
a.flatten!  
a.uniq!  
puts a

irb(main):001:0\> a=[1,2,3,1]  
=\> [1, 2, 3, 1]  
irb(main):002:0\> b=[1,[2,4],[5,6,3],4]  
=\> [1, [2, 4], [5, 6, 3], 4]  
irb(main):003:0\> b.flatten!  
=\> [1, 2, 4, 5, 6, 3, 4]  
irb(main):004:0\> a.push b  
=\> [1, 2, 3, 1, [1, 2, 4, 5, 6, 3, 4]]  
irb(main):005:0\> a.flatten!  
=\> [1, 2, 3, 1, 1, 2, 4, 5, 6, 3, 4]  
irb(main):006:0\> a.uniq!  
=\> [1, 2, 3, 4, 5, 6]  
irb(main):007:0\> puts a  
1  
2  
3  
4  
5  
6  
=\> nil  
irb(main):008:0\>

---

<div class="post-metadata">

**Author:** ![vivek](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/v/77aa72/32.png) [@vivek](https://www.ruby-forum.com/u/vivek)\
**Post date:** [January 12, 2006, 5:10am UTC](https://www.ruby-forum.com/t/is-this-a-bug/95082/4 "2006-01-12T05:10:55Z")

</div>

Ah! thanks for the clarification!  
Just had to one flatten after pushing b on a to acheive what I wanted.

---

<div class="post-metadata">

**Author:** ![vivek](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/v/77aa72/32.png) [@vivek](https://www.ruby-forum.com/u/vivek)\
**Post date:** [January 12, 2006, 11:22am UTC](https://www.ruby-forum.com/t/is-this-a-bug/95082/5 "2006-01-12T11:22:29Z")

</div>

Vivek wrote:

> Ah! thanks for the clarification!  
> Just had to one flatten after pushing b on a to acheive what I wanted.

a=[1,2,3,1]  
b=[1,[2,4],[5,6,3],4]  
b.flatten!  
a.concat b # concat instead of push  
a.uniq!  
puts a

Would also do what you wanted. It’s probably faster than push and  
flatten.

Robin
