Arrays 如何在ruby中声明一个空的二维数组?

Arrays 如何在ruby中声明一个空的二维数组?,arrays,ruby-on-rails-3,Arrays,Ruby On Rails 3,有人能告诉我如何声明一个二维数组的新实例吗? 大多数语言都使用类似 array = Array.new[2][2] array=array.new[2][2] 我不知道用Ruby怎么做 请帮助……您可以做: width = 2 height = 3 Array.new(height){Array.new(width)} #=> [[nil, nil], [nil, nil], [nil, nil]] 您可以使用以下方法在Ruby中声明多维数组: Array.new(行数){Array.

有人能告诉我如何声明一个二维数组的新实例吗? 大多数语言都使用类似

array = Array.new[2][2] array=array.new[2][2] 我不知道用Ruby怎么做

请帮助……

您可以做:

width = 2
height = 3
Array.new(height){Array.new(width)} #=> [[nil, nil], [nil, nil], [nil, nil]] 

您可以使用以下方法在Ruby中声明多维数组:

Array.new(行数){Array.new(列数)}

如何使用此语法

让我们通过上面的例子来理解它,即
array=array.new[2][2]

因此,在本例中,我们必须声明一个空的多维数组,其中包含2行和2列

现在让我们开始实现我们的语法

array=array.new(2){array.new(2)}

现在有了一个
数组
,其中有
2行
2行
列,其中有
nil


< > >代码>数组< /COD>变量包含<代码> [[nIL,nIL],[nIL,nIL] ] /代码>,被认为是<代码>空多维数组或<代码> nILL多维数组< /代码> .< /p> 在Ruby中声明2D数组,使用以下语法值:初始化值

row, col, default_value = 5, 4, 0
arr_2d = Array.new(row){Array.new(col,default_value)}
=> [[0, 0, 0, 0], 
    [0, 0, 0, 0], 
    [0, 0, 0, 0], 
    [0, 0, 0, 0], 
    [0, 0, 0, 0]]
我们可以进行任何级别的嵌套,比如3d数组(5 x 4 x 2):您可以在大多数内部数组中传递块来初始化数组

z = 2
arr_3d = Array.new(row){Array.new(col){Array.new(z){|index| index}}}
=> [[[0, 1], [0, 1], [0, 1], [0, 1]], 
    [[0, 1], [0, 1], [0, 1], [0, 1]], 
    [[0, 1], [0, 1], [0, 1], [0, 1]], 
    [[0, 1], [0, 1], [0, 1], [0, 1]], 
    [[0, 1], [0, 1], [0, 1], [0, 1]]]

现在,您可以使用类似arr_2d[0][1]的[]运算符访问其元素,
实际上它的数组

您还可以通过传递值来初始化:

Array.new(3) { Array.new(3) { '0' } }
输出:

[
 ["0", "0", "0"], 
 ["0", "0", "0"], 
 ["0", "0", "0"]
]
简单地说:
array=array.new(8,array.new(8))

例如,如果他希望高度和宽度为1000,那将是相当乏味的。传统上,数组是按行大顺序排列的,即
[row,row-row]
。因此,您的示例应该交换高度和宽度,如下所示:
Array.new(高度){Array.new(宽度)}
。这样,您就可以使用
arrayInstance[row][column]
来访问元素,而不是
arrayInstance[column][row]
不知道可以为数组指定默认元素。因此,您也可以将内部数组指定为外部数组的默认值:s=array.new(3,array.new(3,true))=>[[true,true,true],[true,true,true],[true,true,true]]哦,不,您不能。每行使用相同的数组。失败。在声明内部数组时,使用{}而不是(),它会起作用。这实际上不起作用。这将创建同一数组的8个副本,但不会创建8个不同的数组