From: James Coglan Date: 2009-04-13T20:46:03+09:00 Subject: Re: single to multi dimension array conversion --0016e6d27ed11d9cae04676e42c8 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit 2009/4/13 James Coglan > 2009/4/13 Ashikali Ashikali > > > Ashikali Ashikali wrote: > > > Can any one tell me converting single to multi dimension array > > > conversion > > > > > > For example , > > > a = [ 1,2,3,4,5,6,7,8,9,10 ] > > > a.( 2,3 ) > > > > > > Output, > > > > > > > > > > > > here , > > > 2 means dimension No > > > 3 means elements in each dimension > > > > > > In above example output should be , > > a = [ [1,2,3],[4,5,6],[7,8,9] , [ 10 ] ] > > > That has more than three elements along the outermost direction. It > represents the matrix: > > 1 2 3 > 4 5 6 > 7 8 9 > 10 > Although, here's one possible and slightly more general solution: class Array def multidim(*sizes) split = sizes.inject { |a,b| a * b } return self unless split result = [] each_slice(split) { |slice| result << slice.multidim(*sizes[1..-1]) } result end end With this, you specify how many you want in each dimension, so: [1,2,3,4,5,6,7,8,9,10].multidim(3) #=> [[1,2,3],[4,5,6],[7,8,9],[10]] It works from the outside in, so for higher dimensions it works like this: [1,2,3,4,5,6,7,8,9,10].multidim(3,2) #=> [ [ [1, 2], [3, 4], [5, 6] ], [ [7, 8], [9, 10] ] ] --0016e6d27ed11d9cae04676e42c8--