如何在c#中分别声明数组的大小?

本文关键字:数组 声明 | 更新日期: 2023-09-27 18:09:52

考虑以下数组:

private int[][] Blocks;

如何分别指定每个数组的大小?我的第一个想法是这样的:(抛出一个错误)

Blocks = new int[5][];
Blocks = new int[][7];

错误如下:

  • 内部索引数错误[];预计1
  • 数组创建必须有数组大小或数组初始化器
  • 无效的等级说明符','或']'

如何在c#中分别声明数组的大小?

有两种方法可以在二维空间中声明数组。

  1. 真正的二维数组
  2. <
  3. 不规则数组/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];