Alle luned=EC 14 gennaio 2008, Sean Murphy ha scritto:
> All,
>
> A newby question, only been using Ruby for about 2 days.
>
> Is there a better way of creating a two dimention array, than the code us=
ed
> below
>
> def create_world x, y
> =A0 row =3D Array.new
>
> =A0 y.times {
> =A0 =A0|j|
> =A0 =A0col =3D Array.new
> =A0 =A0x.times {
> =A0 =A0 |i|
>
> =A0 =A0 =A0 map_type =3D rand(2)
> =A0 =A0 =A0 col[i] =3D map_type
> =A0 =A0 }
> =A0 =A0 row[j] =3D col
> =A0 }
>
> =A0 return row
> end
>
> world =3D create_world(gets.to_i, gets.to_i)

This should work:

def make_2d_array n_row, n_col
  Array.new(n_row) do
    Array.new(n_col){ rand(2) }
  end
end

make_2d_array(gets.to_i, gets.to_i)

The block form of Array.new creates an array of the size passed as argument=
,=20
then calls the block for each index of the array and stores the value=20
returned by the block in the corresponding element of the array (the block=
=20
can take one parameter, the index of the element, which wasn't necessary in=
=20
this case). See the ri documentation for Array.new for more information.

I hope this helps

Stefano