Hi,
I have been learning ruby for the past week and am completely hooked.
Most of the code I am producing is elegant (ruby’s credit), although I
am having trouble elegantly converting a single dimension array with 16
elements into a two-dimension grid [4x4].
Here is what I have so far:
@array = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]
@grid = Array.new
i = 0
index = 0
0.upto(3) do |i|
j = 0
0.upto(3) do |j|
@grid[i] = Array.new if j == 0
@grid[i][j] = @array[index]
index += 1
j += 1
end
i += 1
end
@grid
Thanks,
Giant C.
Giant C. wrote:
Hi,
I have been learning ruby for the past week and am completely hooked.
Most of the code I am producing is elegant (ruby’s credit), although I
am having trouble elegantly converting a single dimension array with 16
elements into a two-dimension grid [4x4].
require ‘enumerator’
@array = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]
result = []
@array.each_slice(4) {|s| result << s }
should do the job.
Cheers,
Peter
__
http://www.rubyrailways.com
Hi –
On Wed, 15 Nov 2006, Giant C. wrote:
@grid = Array.new
end
i += 1
end
@grid
You can do:
require ‘enumerator’
@array = [*1…16] # 
@grid = *@array.enum_slice(4)
Enumerators are, in my view, a bit less transparent than most Ruby
constructs, so this may look more cryptic than it’s worth. The basic
idea is that you’re creating an object – an Enumerator – that has no
real data of its own but that represents, so to speak, the possibility
of an enumeration over @array, sliced up into groups of four. Instead
of enumerating, I’ve converted it to a plain array with the *
operator.
David
On 11/14/06, Giant C. removed_email_address@domain.invalid wrote:
@grid = Array.new
end
i += 1
end
@grid
Let the golfing commence!
require ‘enumerator’
@array = (1…16).to_a
@grid = Array.new(4) {|idx| Array.new(4)}
@array.each_with_index do |val, idx|
@grid[idx/4][idx%4] = val
end
Blessings,
TwP
Hi –
On Wed, 15 Nov 2006, Tim P. wrote:
@array = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]
j += 1
@array = (1…16).to_a
@grid = Array.new(4) {|idx| Array.new(4)}
@array.each_with_index do |val, idx|
@grid[idx/4][idx%4] = val
end
Well, if we’re golfing:
require’enumerator’
g=*(1…16).enum_slice(4)
David