From: Roland Mai Date: 2007-05-27T04:26:38+09:00 Subject: Re: Can you make sense of this Array issue ------=_Part_160443_31476633.1180207598910 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline O I think I did figure this out. It seems the * operator just duplicates the pointers in some optimized fashion. If the nxn array is constructed by setting each m[i][j] element everything works fine.. I should have thought of that before. irb(main):001:0> n = 5 => 5 irb(main):002:0> m = [] => [] irb(main):003:0> for i in 0..(n-1) irb(main):004:1> m[i] ||= [] irb(main):005:1> for j in 0..(n-1) irb(main):006:2> m[i][j] = nil irb(main):007:2> end irb(main):008:1> end => 0..4 irb(main):009:0> m => [[nil, nil, nil, nil, nil], [nil, nil, nil, nil, nil], [nil, nil, nil, nil, nil], [nil, nil, nil, nil, nil], [nil, nil, nil, nil, nil]] irb(main):010:0> m[0][0] = 0 => 0 irb(main):011:0> m => [[0, nil, nil, nil, nil], [nil, nil, nil, nil, nil], [nil, nil, nil, nil, nil], [nil, nil, nil, nil, nil], [nil, nil, nil, nil, nil]] On 5/26/07, Roland Mai wrote: > > I want to have an array, say 5x5 with all nils unless set to something > else. > However, when I set m[0][0] to 0 .. all 0 indices are set to zero.. Hmm.. > never asked for that to be the case. > There's some funky stuff going on here. > > irb(main):001:0> n = 5 > => 5 > irb(main):002:0> m = [[nil]*n]*n > => [[nil, nil, nil, nil, nil], [nil, nil, nil, nil, nil], [nil, nil, nil, > nil, nil], [nil, nil, nil, nil, nil], [nil, nil, nil, nil, nil]] > irb(main):003:0> m[0][0] = 0 > => 0 > irb(main):004:0> m > => [[0, nil, nil, nil, nil], [0, nil, nil, nil, nil], [0, nil, nil, nil, > nil], [0, nil, nil, nil, nil], [0, nil, nil, nil, nil]] > > > Any ideas? > ------=_Part_160443_31476633.1180207598910--