Forum: Ruby Is this a bug?

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Vivek (Guest)
on 2006-01-12 05:55
(Received via mailing list)
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
Gavin K. (Guest)
on 2006-01-12 06:01
(Received via mailing list)
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.
Kev J. (Guest)
on 2006-01-12 06:04
(Received via mailing list)
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>
Vivek (Guest)
on 2006-01-12 06:10
(Received via mailing list)
Ah! thanks for the clarification!
Just had to one flatten after pushing b on a to acheive what I wanted.
Robin S. (Guest)
on 2006-01-12 12:22
(Received via mailing list)
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
This topic is locked and can not be replied to.