如何在c#中分别声明数组的大小?
本文关键字:数组 声明 | 更新日期: 2023-09-27 18:09:52
考虑以下数组:
private int[][] Blocks;
如何分别指定每个数组的大小?我的第一个想法是这样的:(抛出一个错误)
Blocks = new int[5][];
Blocks = new int[][7];
错误如下:
- 内部索引数错误[];预计1
- 数组创建必须有数组大小或数组初始化器
- 无效的等级说明符','或']'
有两种方法可以在二维空间中声明数组。
- 真正的二维数组 <
- 不规则数组/gh>
一个二维数组是一个二维的单数组,即一个矩阵。它有一个矩形:
int[,] twoDimensionalArray = new int[5, 7];
可以像这样循环遍历二维数组的所有元素:
for (int i = 0; i < twoDimensionalArray.GetLength(0); i++) {
for (int j = 0; j < twoDimensionalArray.GetLength(1); j++) {
int element = twoDimensionalArray[i, j];
// TODO: Do something with element.
}
}
如果数组的大小为常量,则声明常量的大小:
const int ArrWidth = 5, ArrHeight = 7;
int[,] twoDimensionalArray = new int[ArrWidth, ArrHeight];
for (int i = 0; i < ArrWidth; i++) {
for (int j = 0; j < ArrHeight; j++) {
int element = twoDimensionalArray[i, j];
// TODO: Do something with element.
}
}
您还可以使用foreach
:
foreach (int element in twoDimensionalArray) {
// TODO: Do something with element.
}
锯齿数组是数组的数组。您必须分两步创建数组:
// First create the base (or outer) array
int[][] jaggedArray = new int[5][];
// Then create the nested (or innner) arrays
jaggedArray[0] = new int[7];
jaggedArray[1] = new int[2];
jaggedArray[2] = new int[11];
jaggedArray[3] = new int[0];
jaggedArray[4] = new int[4];
由于嵌套数组可以有不同的大小,这种类型的数组被称为"锯齿"。
可以像这样循环遍历锯齿数组的所有元素:
for (int i = 0; i < jaggedArray.Length; i++) {
int[] inner = jaggedArray[i];
if (inner != null) {
for (int j = 0; j < inner.Length; j++) {
int element = inner[j];
// TODO: Do something with element.
}
}
}
如果你知道你已经初始化了所有的内部数组,你可以省略null测试。
This
int[][] blocks = ...
是数组的数组。
你想要的可能是一个二维数组,声明如下:
int[,] blocks = new int[5,7];
如果你真的想要一个数组的数组,你只能像这样声明第一个'维度':
int[][] block = new int[5][];
创建一个包含5 (null)的数组。
现在你必须像这样创建每个"子数组":
block[0] = new int[3];
block[1] = new int [20];
这里的不同之处在于,与二维数组相比,每个"子数组"可以有完全不同的大小。
你声明的是一个数组的数组,所以你有两种情况
Blocks = new int[5][];
第一个是数组中具有相同维数的内容
for (int i = 0; i < Blocks.Length; i++)
Blocks[i] = new int[8];
第二个是数组的内容大小有不同的维数:
Blocks[0] = new int[6];
Blocks[1] = new int[4];
Blocks[2] = new int[10];
Blocks[3] = new int[7];
Blocks[4] = new int[3];