如果我将它用于Jagged Arrays,你如何获得多维数组的宽度和高度?

时间:2016-12-15 10:45:22

标签: c# unity3d multidimensional-array jagged-arrays

我有一个数组,我想知道每个数组的长度。

public int[][,] _EnemyPosition = new int[][,]
{
    new int[,]{ {0},{1},{2},{3},{4}},
    new int[,]{ {0,6},{1,7},{2,8},{3,9},{4,10}},
};

Debug.Log(_EnemyPosition.Length); // Output is 2
Debug.Log(_EnemyPosition[1].GetLength(0)); // Output is 5

但我无法得到

 Debug.Log(_EnemyPosition[1][0].length);

它给我一个错误

error CS0022: Wrong number of indexes `1' inside [], expected `2'

我想知道如何获得这个数组的长度

_EnemyPosition[1][0].length

2 个答案:

答案 0 :(得分:3)

var length = _EnemyPosition[0].Length; //returns 5 (5·1)
var length = _EnemyPosition[1].Length; //returns 10 (5·2)

这就是你想要的吗?您的要求远非明确:

  

我想知道如何获取此数组的长度:_EnemyPosition[1][0].length

这不是数组,_EnemyPostion[1]是二维数组[,]。考虑以下模拟场景:

int[,] myTwoDimensionalArray = ...
var whatever = myTwoDimensionalArray[0]; //not valid, array dimensiones don't match.

因此,当您想要返回的长度时,我们有三个选项:

  1. _EnemyPosition[1].Length返回二维数组10的总长度。
  2. _EnemyPosition[1].GetLength(0)返回二维数组<{1}}的第一个维度的长度
  3. 5返回二维数组_EnemyPosition[1].GetLength(1) second 维度的长度
  4. 显然,22的结果是3。那么,你想要哪一个?

答案 1 :(得分:3)

让我们解开阵列:你有

 int[][,] _EnemyPosition

2d数组的数组 ;所以你可以打电话

 _EnemyPosition.Length 

总共是2d数组的数量;对于index位置的每个2d数组,您可以调用

 _EnemyPosition[index].GetLength(0)
 _EnemyPosition[index].GetLength(1)

index s 2d数组中每个维度(行和列)的长度。请注意,锯齿状阵列 2d数组是不同的类型;这就是为什么你不能放

的原因
 // doesn't compile
 _EnemyPosition[1][0]

因为_EnemyPosition[1]返回需要 2 索引的 2d数组(类似于_EnemyPosition[1][0,1]