【C#】一维、二维、三维数组的使用
在C#中,数组是用于存储固定数量相同类型元素的数据结构。根据维度的不同,可以分为一维数组、二维数组(矩阵阵列)、三维数组等。每增加一个维度,数据的组织方式就会变得更加复杂。
一维数组
一维数组是最简单的数组形式,它是一个线性集合,包含一系列相同类型的元素。可以通过单个索引来访问每个元素。
int[] myArray = new int[5]; // 创建一个含有5个整数的一维数组
- 存储一系列数据:例如,保存一个班学生的所有成绩。
- 队列或栈:在一维数组中实现简单的队列(FIFO)或栈(LIFO)数据结构。
初始化
int[] numbers = new int[5]; // 创建一个含有5个整数的一维数组
// 或者使用集合初始化器
int[] numbersInit = {1, 2, 3, 4, 5};
访问元素
Console.WriteLine(numbers[0]); // 输出第一个元素
numbers[0] = 10; // 修改第一个元素的值
遍历
foreach (var num in numbers) {
Console.WriteLine(num);
}
二维数组
二维数组可以视为“数组的数组”,通常用来表示表格或矩阵,需要两个索引(行和列)来定位一个特定的元素。
int[,] myMatrix = new int[3, 4]; // 创建一个3行4列的二维数组
- 表格数据:用来表示电子表格或者数据库表,其中每一行代表一条记录,每一列代表字段。
- 图像处理:每个像素可以由二维数组的一个元素表示,其中包含颜色信息(如RGB值)。
初始化
int[,] matrix = new int[3, 4]; // 创建一个3x4的二维数组
// 或者使用集合初始化器
int[,] matrixInit = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
访问元素
Console.WriteLine(matrix[0, 0]); // 输出第一行第一列的元素
matrix[0, 0] = 100; // 修改第一行第一列的元素值
遍历
for (int i = 0; i < matrix.GetLength(0); i++) {
for (int j = 0; j < matrix.GetLength(1); j++) {
Console.Write(matrix[i, j] + " ");
}
Console.WriteLine();
}
三维数组
三维数组可以想象成多个二维数组堆叠在一起,形成了一个立方体结构,需要三个索引(深度、行、列)来定位一个元素。
int[,,] myCube = new int[2, 3, 4]; // 创建一个2x3x4的三维数组
- 3D建模:三维数组可以用于表示三维空间中的点或体素(voxel),这对于计算机图形学和视频游戏中构建世界模型非常重要。
- 时间序列分析:对于随时间变化的二维数据集,比如天气预报中的温度读数(纬度、经度和时间),可以使用三维数组来组织这些数据。
初始化
double[,,] cube = new double[2, 3, 4]; // 创建一个2x3x4的三维数组
// 或者使用集合初始化器
double[,,] cubeInit = {
{
{1.1, 2.2, 3.3, 4.4}, {5.5, 6.6, 7.7, 8.8}, {9.9, 10.1, 11.1, 12.1}},
{
{13.1, 14.1, 15.1, 16.1}, {17.1, 18.1, 19.1, 20.1}, {21.1, 22.1, 23.1, 24.1}}
};
访问元素
Console.WriteLine(cube[0, 0, 0]); // 输出第一个体素的值
cube[0, 0, 0] = 100.0; // 修改第一个体素的值
遍历
for (int i = 0; i < cube.GetLength(0); i++) {
for (int j = 0; j < cube.GetLength(1); j++) {
for (int k = 0; k < cube.GetLength(2); k++) {
Console.Write(cube[i, j, k] + " ");
}
Console.WriteLine();
}
Console.WriteLine("-----");
}
更高维度的数组
理论上,C#支持创建四维及更高维度的数组,但它们并不常用,因为随着维度的增加,理解和操作这些数组会变得非常复杂。多维数组使用更多的索引来定位元素,例如四维数组将需要四个索引。
注意事项
- GetLength() 方法可以用来获取每个维度的长度。
- 对于更高维度的数组,虽然理论上可以创建,但在实际编程中应谨慎使用,因为它们可能会导致代码难以理解和维护。
- 在处理多维数组时,确保索引不会超出数组的界限,否则会导致
IndexOutOfRangeException
异常。
通过上述方法,你可以对不同维度的数组进行初始化、访问和遍历。