Is this a bug?

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

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.

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>

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

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 forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs