📜  C#锯齿数组(1)

📅  最后修改于: 2023-12-03 15:00:17.617000             🧑  作者: Mango

C# 锯齿数组

介绍

C# 中的锯齿数组(Jagged Array)是一种多维数组,它由若干个一维数组组成,每个一维数组的长度没有固定,可以不同。锯齿数组通常用于处理不规则的数据结构,比如二维树状结构、稀疏矩阵等。

与普通的多维数组不同,锯齿数组的初始化时需要分别指定每个一维数组的长度。由于每个一维数组的长度不同,因此无法用类似于二维数组中 arr[i,j] 的方式来访问元素。需要使用 arr[i][j] 的方式来访问元素。

下面是一个例子,它演示了如何在 C# 中创建、初始化和访问锯齿数组:

int[][] jaggedArray = new int[3][]
{
    new int[] {1, 3, 5, 7, 9},
    new int[] {0, 2, 4, 6},
    new int[] {11, 22}
};

// 访问元素
int element = jaggedArray[1][2]; // 4

上述代码中,我们创建了一个包含 3 个一维数组的锯齿数组。第一个数组有 5 个元素,第二个数组有 4 个元素,第三个数组有 2 个元素。我们可以使用类似于二维数组的方式来初始化每个数组,也可以分别对每个数组进行初始化。对于访问元素,我们需要首先访问一维数组,再访问二维数组。

用途

锯齿数组通常用于处理不规则的数据结构,比如二维树状结构、稀疏矩阵等。下面是一个例子,它演示了如何用锯齿数组来表示一个三角形:

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

上述代码中,我们创建了一个包含 4 个一维数组的锯齿数组,用来表示一个三角形。第一个数组只包含一个元素,第二个数组包含 2 个元素,第三个数组包含 3 个元素,以此类推。这种方式可以有效地节省内存空间,因为不用为没有数据的部分分配存储空间。

锯齿数组也可以用于动态数组的实现。由于锯齿数组的长度没有固定,因此我们可以根据需要添加或删除一维数组,以及在一维数组中添加或删除元素。如下所示:

List<int>[] jaggedList = new List<int>[3]
{
    new List<int>{1, 2},
    new List<int>{3, 4, 5},
    new List<int>{6}
};

// 添加一维数组
jaggedList = jaggedList.Concat(new List<int>[] { new List<int> { 7, 8 } }).ToArray();

// 在一维数组中添加元素
jaggedList[0].Add(3);

上述代码中,我们创建了一个包含 3 个元素的 List<int> 数组,长度为 2、3 和 1。然后我们可以使用 LINQ 的 Concat 方法来添加一个新的数组,也可以使用 Add 方法在原有的数组中添加元素。

锯齿数组也可以作为多维数组的替代品,在部分情况下可以更加高效地处理数据。但需要注意的是,锯齿数组不支持一些多维数组支持的方法,比如 GetLengthGetLowerBound

总结

C# 中的锯齿数组是一种多维数组,由若干个一维数组组成,每个一维数组的长度没有固定,可以不同。它通常用于处理不规则的数据结构,比如二维树状结构、稀疏矩阵等。使用锯齿数组时需要注意访问元素的语法,也需要注意它不支持一些多维数组支持的方法。