我的代码中有一节需要反转矩阵。这只能合理地在方形矩阵上完成,在这种情况下是3×3方阵。我用来反转矩阵的工具一直说我的阵列不是正确的方块。
所以我做了一点测试:
double[,] x = new double[3, 3];
MessageBox.Show(x.GetLength(0).ToString());
MessageBox.Show(x.GetLength(1).ToString());
MessageBox.Show(x.GetLength(2).ToString());
第一个出现为“3”。第二个出现为“3”。第三个出现IndexOutOfRangeException
。我只是忽略了一些非常明显或者......这有点奇怪吗?
(注意:这是使用.Net 2.0的C#代码)
答案 0 :(得分:11)
您只有一个包含两个维度的数组。为什么您会要求第三个维度的大小为您提供有效的结果?
Array.GetLength()
方法返回Array指定维度中的元素数。在你的情况下:
x.GetLength(2).ToString(); // asking for size of third dimension
你问的是二维数组,它的第三维尺寸是多少。结果是IndexOutOfRangeException
。这是预期的行为。
在您的代码示例中,看起来您可能会混淆每个声明尺寸的大小,并且维数。以下是不同尺寸的矩形阵列的一些示例:
var d1 = new int[5]; // one dimensional array, containing 5 elements
var d2 = new int[3,3]; // two-dimensional 3x3 element array
var d3 = new int[2,2,2]; // three-dimension array of 2x2x2 elements
var d4 = new int[2,5,6,8]; // four dimensional array, of 2x5x6x8 elements
看模式?维数由您在数组声明中指定的数量确定。每个维度的大小由声明中值确定。
答案 1 :(得分:4)
您的矩阵只有2个维度,长度均为3个元素。第三行MessageBox
试图打印不存在的第三维的长度。
答案 2 :(得分:3)
只是提供一个可视化的例子并用我自己的话语提供答案......(我最初看到为什么抛出异常也失败了):
double[,] x = new double[3, 3];
给出一个如下所示的数组:
[0,0] [1,0] [2,0]
[0,1] [1,1] [2,1]
[0,2] [1,2] [2,2]
我认为代码试图找到可能被认为是子阵列的长度,其中每一行代表一个数组,而该数组又是一个更大数组的成员。
实际上,行本身不是数组,只是原始数组的成员(双精度数)。 GetLength
方法正在寻找数组的维度而不是长度(这可能会让人感到困惑,因为Length
用于确定数组中的成员数)。如果您愿意,此数组有两个维度,X
维度和Y
维度。
把它想象成一张有两个尺寸的平板。如果你添加第三个:
double[,,] x = new double[3, 3, 3];
工作表变为多维数据集,添加了新维Z
,第三个GetLength
将起作用。
答案 3 :(得分:1)
double[,,] x = new double[3, 3, 3];
MessageBox.Show(x.GetLength(0).ToString());
MessageBox.Show(x.GetLength(1).ToString());
MessageBox.Show(x.GetLength(2).ToString());
答案 4 :(得分:0)
您的阵列中没有定义3个维度,因此您只能获得两个维度。您的代码要求的是立方体的尺寸,而不是正方形。
double[,] x = new double[3,3] // This sets up a two-dimensional array
MessageBox.Show(x.GetLength(0).ToString()); //Shows the length of the X axis
MessageBox.Show(x.GetLength(1).ToString()); //Shows the length of the Y axis
MessageBox.Show(x.GetLength(2).ToString()); //Trys to show the length of Z Axis.
答案 5 :(得分:0)
这可以帮助您查看已解释的内容。
你声明它的x数组如下:
double[,] x = new double[3, 3];
Dimensions 0,1 0,1 0,1
Element [0,0], [0,1], [0,2]
Element [1,0], [1,1], [1,2]
Element [2,0], [2,1], [2,2]
Lengths 3,3 3,3 3,3