Is this a bug?


#1

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


#2

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.


#3

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>


#4

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


#5

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