how to copy array in ruby

P

PIKI

HI

I am a novice in Ruby programming so this question might look trivial
to lot of people.

But I am struggling to copy an array.

I am using

a = []
b = a

/* some manipulation here on "b" and "a" I havent touched at all*/

Here when i am trying to see contents of "a" and "b" both have same
contents

But my expectation was they shud be different

Instead of b = a, I also tried b.replace(a)

but no luck here also.

Please help me on how to make a duplicate("b") of "a" so that changes
done on b will not affect a

Thanks
Pikender Sharma
 
J

Jesús Gabriel y Galán

But I am struggling to copy an array.

I am using

a = []
b = a

/* some manipulation here on "b" and "a" I havent touched at all*/

Here when i am trying to see contents of "a" and "b" both have same
contents

But my expectation was they shud be different

Instead of b = a, I also tried b.replace(a)

but no luck here also.

Please help me on how to make a duplicate("b") of "a" so that changes
done on b will not affect a

irb(main):001:0> a = [1,2,3,4]
=> [1, 2, 3, 4]
irb(main):002:0> b = a.dup
=> [1, 2, 3, 4]
irb(main):003:0> b[0] = 55
=> 55
irb(main):004:0> a
=> [1, 2, 3, 4]
irb(main):005:0> b
=> [55, 2, 3, 4]

Hope this helps,

Jesus.
 
P

PIKI

But I am struggling tocopyanarray.
I am using
a = []
b = a
/* some manipulation here on "b" and "a" I havent touched at all*/
Here when i am trying to see contents of "a" and "b" both have same
contents
But my expectation was they shud be different
Instead of b = a, I also tried b.replace(a)
but no luck here also.
Please help me on how to make a duplicate("b") of "a" so that changes
done on b will not affect a

irb(main):001:0> a = [1,2,3,4]
=> [1, 2, 3, 4]
irb(main):002:0> b = a.dup
=> [1, 2, 3, 4]
irb(main):003:0> b[0] = 55
=> 55
irb(main):004:0> a
=> [1, 2, 3, 4]
irb(main):005:0> b
=> [55, 2, 3, 4]

Hope this helps,

Jesus.- Hide quoted text -

- Show quoted text -

Hi Jesús Gabriel y Galán

Thanks for the reply and help

I tried ur solution but it is also not working :(

I am unable to figure out the trick

Thanks
Pikender Sharma
 
L

lith

I tried ur solution but it is also not working :(
I am unable to figure out the trick

In order to help us to figure out what is the problem, you might want
to post a code snippet demonstrating the defect and explain what how
you would expect ruby to behave.

Array#dup creates a copy of the array, not of the elements in the
array, aka a shallow copy.
 
R

Ralph Shnelvar

l> Array#dup creates a copy of the array, not of the elements in the
l> array, aka a shallow copy.

Is there a way to make a deep copy? That is ... in the code below,
could b.dup be replaced with something like b.deepdup?


irb(main):019:0> a1 = [1,2,3,4]
=> [1, 2, 3, 4]
irb(main):020:0> b = [a1,5]
=> [[1, 2, 3, 4], 5]
irb(main):021:0> c1 = b
=> [[1, 2, 3, 4], 5]
irb(main):022:0> c2 = b.dup
=> [[1, 2, 3, 4], 5]
irb(main):023:0> a1[0] = "hi"
=> "hi"
irb(main):024:0> a1
=> ["hi", 2, 3, 4]
irb(main):025:0> c1
=> [["hi", 2, 3, 4], 5]
irb(main):026:0> c2
# because of the shallow copy, c2[0][0] is "hi" instead of a naively
# assumed 1.
=> [["hi", 2, 3, 4], 5]
irb(main):027:0> c1[1] = "bye"
=> "bye"
irb(main):028:0> c1
=> [["hi", 2, 3, 4], "bye"]
irb(main):029:0> c2
# The shallow copy gives the expected result for c2[1], below.
=> [["hi", 2, 3, 4], 5]
 
D

Derrick Fiedler

you can make it via this method "clone" b =3D a.clone
Am 14.11.2009 um 11:25 schrieb PIKI:
But I am struggling tocopyanarray.
I am using
a =3D []
b =3D a
/* some manipulation here on "b" and "a" I havent touched at all*/
Here when i am trying to see contents of "a" and "b" both have same
contents
But my expectation was they shud be different
Instead of b =3D a, I also tried b.replace(a)
but no luck here also.
Please help me on how to make a duplicate("b") of "a" so that =20
changes
done on b will not affect a

irb(main):001:0> a =3D [1,2,3,4]
=3D> [1, 2, 3, 4]
irb(main):002:0> b =3D a.dup
=3D> [1, 2, 3, 4]
irb(main):003:0> b[0] =3D 55
=3D> 55
irb(main):004:0> a
=3D> [1, 2, 3, 4]
irb(main):005:0> b
=3D> [55, 2, 3, 4]

Hope this helps,

Jesus.- Hide quoted text -

- Show quoted text -

Hi Jes=FAs Gabriel y Gal=E1n

Thanks for the reply and help

I tried ur solution but it is also not working :(

I am unable to figure out the trick

Thanks
Pikender Sharma
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,743
Messages
2,569,478
Members
44,898
Latest member
BlairH7607

Latest Threads

Top