I am trying to create a array, which basically forms a grid, which is
evenly spaced in a Cartesian plane. The spacing is var1 and var2, in the
x and z directions. Plan is to copy columns on these 'points', which is
done in Sketchup using Ruby API scripts. So there are going to 8 and 9
columns respectively, and there are points when n = i, where there will
be common columns.
This is not working out for me very well. It makes sense to me, somehow
it doesn't seem to be working (it returns with no values).Any
suggestions? And If I want floors to this array, i.e. making it 3D, how
will it work?
Almost every line of this code is problematic. To fix:
* Never use global variables.
* Instead of your "for" constructs, use "times".
* Use the proper syntax for multidimensional arrays (which is
array[x][y], not array[x, y]). array[x, y] has a completely different
meaning.
Best,
--
Marnen Laibow-Koser
http://www.marnen.org
mar...@marnen.org
> I am trying to create a array, which basically forms a grid, which is
> evenly spaced in a Cartesian plane. The spacing is var1 and var2, in the
> x and z directions. Plan is to copy columns on these 'points', which is
> done in Sketchup using Ruby API scripts. So there are going to 8 and 9
> columns respectively, and there are points when n = i, where there will
> be common columns.
>
> This is not working out for me very well. It makes sense to me, somehow
> it doesn't seem to be working (it returns with no values).Any
> suggestions? And If I want floors to this array, i.e. making it 3D, how
> will it work?
Hiya Mahadev
if you want to define a 10x10 multi-dimensional-array you can use the
map method
mda = (0..9).map { (0..9).map { nil } }
this builds a grid for you with nil as the default element in each cell
of the grid. (You can use something other than nil if you want.)
And then if you want to iterate through it there are a few ways you can
do it but like MLK says above one way is to use the times method like
this:
mda.length.times do |x|
mda[0].length.times do |y|
mda[x][y] = some_new_value
end
end
I like to chain array lengths through when I use times so that if I need
to later expand or shorten my array length then I don't have to modify
the code in too many places.
And that should pretty much get you started. =)
Good luck and happy rubying!
-greg
$array_floor[n,i]=... does not assign to a two dimensional Array.
Rather, it assigns to a portion of the array:
irb(main):004:0> a=(1..10).to_a
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
irb(main):005:0> a[3,2] = 555
=> 555
irb(main):006:0> a
=> [1, 2, 3, 555, 6, 7, 8, 9, 10]
irb(main):007:0>
Here's another option
array_floor = Array.new 7 do |i|
Array.new 8 do |n|
[i,0,n]
end
end
Note though that this will create a three dimensional matrix. Btw, for
structures like this "pp" is a useful utility for printing:
require 'pp'
pp array_floor
Kind regards
robert
--
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/
Regards,
Mahadev