数组

交错数组

预计阅读时间1 分 4 views

前言

在 C# 中,锯齿数组(Jagged Array)是一种特殊的数组结构,与多维数组不同,锯齿数组中的每个元素也是一个数组,但这些内部数组的大小可以不同。锯齿数组常用于表示不规则矩阵或者需要存储不同大小数组的场景。

作用

锯齿数组提供了一种灵活的方式来处理不同长度的数据集合。它允许在同一个数组中存储长度各不相同的数组,因此在需要存储不规则结构数据的场景下非常有用。锯齿数组在内存分配上比多维数组更为灵活,适合用于需要动态调整数组长度的情况。

使用场景

  1. 数据结构的不规则表示:当数据具有不规则的行列长度时,锯齿数组可以轻松适应,例如:表示不同长度的学生成绩列表或不同年份的销售数据。
  2. 稀疏矩阵存储:当矩阵的某些行或列没有相同数量的数据时,锯齿数组可以有效减少不必要的内存占用。
  3. 动态数据表示:对于动态生成的数据集,锯齿数组允许根据实际需求动态设置每个子数组的大小。

示例

声明锯齿数组

在 C# 中,声明一个锯齿数组的语法如下:

dataType[][] jaggedArray = new dataType[rows][];

其中 dataType 是数组中元素的类型,rows 表示锯齿数组的行数。每一行可以有不同长度的子数组。例如:

int[][] jaggedArray = new int[2][];

这里,jaggedArray 是一个包含两行的锯齿数组。

初始化锯齿数组

可以为每个子数组单独设置大小:

// 设置第一个子数组的大小为3
jaggedArray[0] = new int[3];

// 设置第二个子数组的大小为2
jaggedArray[1] = new int[2];

初始化数组时,也可以直接为每个子数组赋值:

jaggedArray[0] = new int[] {1, 3, 5};
jaggedArray[1] = new int[] {2, 4};

或者在声明时初始化:

int[][] jaggedArray = {
    new int[] {10, 20, 30},
    new int[] {11, 22},
    new int[] {88, 99}
};

访问和修改锯齿数组中的元素

可以通过索引来访问锯齿数组中的元素:

Console.WriteLine(jaggedArray[1][0]); // 输出: 2
Console.WriteLine(jaggedArray[0][1]); // 输出: 3

同样,也可以通过索引修改锯齿数组中的元素:

jaggedArray[1][0] = 42;
Console.WriteLine(jaggedArray[1][0]); // 输出: 42

遍历锯齿数组

通过嵌套循环遍历锯齿数组中的元素:

for (int i = 0; i < jaggedArray.Length; i++) {
    for (int j = 0; j < jaggedArray[i].Length; j++) {
        Console.Write(jaggedArray[i][j] + " ");
    }
    Console.WriteLine();
}

这段代码将输出锯齿数组的所有元素,每行输出一个子数组的元素。

示例代码

下面是一个完整的示例,展示了如何声明、初始化并遍历锯齿数组:

using System;

namespace JaggedArray {
  class Program {
    static void Main(string[] args) {

      // 声明并初始化锯齿数组
      int[][] jaggedArray = {
          new int[] {1, 3, 5},
          new int[] {2, 4}
      };

      // 打印锯齿数组的元素
      Console.WriteLine("jaggedArray[1][0]: " + jaggedArray[1][0]);  // 输出: 2
      Console.WriteLine("jaggedArray[1][1]: " + jaggedArray[1][1]);  // 输出: 4
      Console.WriteLine("jaggedArray[0][2]: " + jaggedArray[0][2]);  // 输出: 5
    }
  }
}

多维数组与锯齿数组结合

在 C# 中,还可以将多维数组作为锯齿数组的元素。例如:

int[][][,] jaggedArray = new int[2][][,] {
    new int[][,] { new int[,] { {1, 2}, {3, 4} } },
    new int[][,] { new int[,] { {5, 6}, {7, 8} }, new int[,] { {9, 10} } }
};

这种组合形式允许创建更加复杂的数据结构。

结语

锯齿数组为我们提供了处理不规则数据集合的灵活方式,允许每个子数组的大小不同。在需要处理不同维度或不规则数据结构的场景中,锯齿数组能够提供高效且灵活的解决方案。无论是遍历数组,还是存储动态大小的数据,锯齿数组都能够显著提高程序的灵活性。

Leave a Comment

分享此文档

交错数组

或复制链接

内容