Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > multimimensional arrays - i am not getting it..

Reply
Thread Tools

multimimensional arrays - i am not getting it..

 
 
Sergio Ruiz
Guest
Posts: n/a
 
      05-18-2007
let me just give a blip of what i am getting...

>> a = Array.new(3,[])

=> [[], [], []]
>> a[2] << "check"

=> ["check"]
>> a

=> [["check"], ["check"], ["check"]]

this is totally not what i am expecting..

what i am expecting is:

[[],[],[["check"]]]

as in..

the 2 element should have the "check" string dropped into the next
available position..

how would i go about setting that (or any other) element only?

thanks!

--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
 
 
 
Mike Fletcher
Guest
Posts: n/a
 
      05-18-2007
Sergio Ruiz wrote:
> let me just give a blip of what i am getting...
>
>>> a = Array.new(3,[])

> => [[], [], []]


You've made an array containing three copies of a reference to the same
array instance.

irb(main):001:0> a = Array.new( 3, [] )
=> [[], [], []]
irb(main):002:0> a.each_with_index { |x,i| puts "#{i}: #{x.object_id}" }
0: 8484280
1: 8484280
2: 8484280

I believe you'd want:

a = Array.new( 3 ) { |idx| Array.new() }

That will call the block once for each element, and that block will
create a new (different) array instance each time it's called.


irb(main):001:0> a = Array.new( 3 ) { |idx| Array.new }
=> [[], [], []]
irb(main):002:0> a[2] << "foo"
=> ["foo"]
irb(main):003:0> a
=> [[], [], ["foo"]]
irb(main):004:0> a.each_with_index { |x,i| puts "#{i}: #{x.object_id}" }
0: 2741440
1: 2741430
2: 2741420

--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
 
 
 
Stefano Crocco
Guest
Posts: n/a
 
      05-18-2007
Alle venerd=C3=AC 18 maggio 2007, Sergio Ruiz ha scritto:
> let me just give a blip of what i am getting...
>
> >> a =3D Array.new(3,[])

>
> =3D> [[], [], []]
>
> >> a[2] << "check"

>
> =3D> ["check"]
>
> >> a

>
> =3D> [["check"], ["check"], ["check"]]
>
> this is totally not what i am expecting..
>
> what i am expecting is:
>
> [[],[],[["check"]]]
>
> as in..
>
> the 2 element should have the "check" string dropped into the next
> available position..
>
> how would i go about setting that (or any other) element only?
>
> thanks!


Look at the documentation for Array.new (ri Array.new). Array.new(n, obj)=20
creates an array with n entries, all containing the same object, obj. You c=
an=20
see this comparing the entries' object_id, or using equal?: a[0].equal?(a[1=
])=20
=3D> true. Since all entries contain the same object, when you modify it, t=
he=20
change shows everywhere in the array.

To fill the array with *different* empty arrays, you need to use the form o=
f=20
Array.new which takes a block:

Array.new(3){[]}

In this form, the block is called for each index, with the index as argumen=
t=20
(you can omit it here because you don't need it). The result of the block i=
s=20
stored in the corresponding entry. The point is that each time the block is=
=20
called, a *new* empty array is created and stored in the returned array. Th=
is=20
time, a[0].equal?(a[1]) gives false.

I hope this helps

Stefano

 
Reply With Quote
 
Sergio Ruiz
Guest
Posts: n/a
 
      05-18-2007

> You've made an array containing three copies of a reference to the same
> array instance.



got it!

dangit..

this tripped me up all day..

thanks!

--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
Dan Stevens (IAmAI)
Guest
Posts: n/a
 
      05-20-2007
Heh I remember when I made this mistake

On 18/05/07, Sergio Ruiz <(E-Mail Removed)> wrote:
>
> > You've made an array containing three copies of a reference to the same
> > array instance.

>
>
> got it!
>
> dangit..
>
> this tripped me up all day..
>
> thanks!
>
> --
> Posted via http://www.ruby-forum.com/.
>
>


 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Multidimensional arrays and arrays of arrays Philipp Java 21 01-20-2009 08:33 AM
char arrays and integer arrays... why the difference? Bill Reyn C++ 3 06-22-2004 12:01 PM
Arrays.asList() returning java.util.Arrays$ArrayList Alexandra Stehman Java 5 06-17-2004 06:04 PM
Arrays and Pointers to Arrays kelvSYC C Programming 2 09-26-2003 06:52 AM
initializing arrays of arrays Mantorok Redgormor C Programming 4 09-11-2003 02:08 AM



Advertisments