C# 中的数组类型、多维数组和数组操作
1. 什么是数组?
- 定义:
数组是存储固定大小的相同类型元素的集合。 - 特性:类型一致性:所有元素必须是相同的数据类型。固定大小:数组的大小在创建后不能更改。索引访问:通过索引访问元素,从 0 开始。
2. 声明和初始化数组
- 声明数组:
- // 声明一个整数数组(大小未指定) int[] numbers; // 声明并初始化 int[] numbers = new int[5]; // 大小为5,默认值为0
- 初始化数组:
- 使用直接赋值:int[] numbers = { 1, 2, 3, 4, 5 };
- 使用 new:int[] numbers = new int[] { 1, 2, 3, 4, 5 };
3. 多维数组
- 二维数组:
- 定义和初始化:
- int[,] matrix = new int[2, 3]; // 2 行 3 列 int[,] predefinedMatrix = { { 1, 2, 3 }, { 4, 5, 6 } };
- 访问元素:
- Console.WriteLine(matrix[0, 1]); // 第一行第二列元素
- 三维及多维数组:
- 定义:int[,,] threeDimArray = new int[2, 3, 4]; // 三维数组
- 特点:
- 多维数组的元素通过多个索引访问,形状固定。
- 适合矩阵、立体数据存储。
4. 锯齿数组(Jagged Array)
- 定义:
- 锯齿数组是数组的数组,其中每个子数组可以具有不同的长度。
- 声明和初始化:
- int[][] jaggedArray = new int[3][]; // 定义一个包含三个数组的数组 jaggedArray[0] = new int[] { 1, 2, 3 }; jaggedArray[1] = new int[] { 4, 5 }; jaggedArray[2] = new int[] { 6 };
- 访问元素:
- Console.WriteLine(jaggedArray[1][0]); // 第二个数组的第一个元素
- 适用场景:
- 数据大小不均匀,例如学生成绩(不同学生有不同科目)。
5. 数组的常见操作
- 访问和修改元素:
- int[] numbers = { 10, 20, 30 }; Console.WriteLine(numbers[1]); // 访问索引为1的元素 numbers[1] = 25; // 修改索引为1的元素
- 遍历数组:
- 使用 for 循环:for (int i = 0; i < numbers.Length; i++) { Console.WriteLine(numbers[i]); }
- 使用 foreach 循环:foreach (int number in numbers) { Console.WriteLine(number); }
- 数组排序:
- Array.Sort(numbers); // 升序排序 Array.Reverse(numbers); // 降序排列
- 查找元素:
- int index = Array.IndexOf(numbers, 30); // 查找值为30的索引
- 复制数组:
- 使用 Array.Copy:int[] destination = new int[5]; Array.Copy(numbers, destination, numbers.Length);
- 使用 Clone:int[] clonedArray = (int[])numbers.Clone();
- 动态调整大小:
- Array.Resize(ref numbers, 10); // 调整大小到10
6. 数组的优缺点
- 优点:
- 高效的索引访问。
- 固定大小,内存连续分配,访问速度快。
- 缺点:
- 固定大小限制了动态需求。
- 插入和删除操作效率低。
7. 数组与集合的区别
特性 | 数组 | 集合 |
大小 | 固定,定义后不可更改 | 动态,可根据需求自动调整 |
类型限制 | 元素类型必须一致 | 允许不同的元素类型 |
操作复杂度 | 插入、删除较为复杂 | 插入、删除较为简单 |
性能 | 更高效,适合大批量数据操作 | 通常较数组稍慢 |
8. 示例代码:多维数组操作
using System;
class Program
{
static void Main()
{
// 定义二维数组
int[,] matrix = { { 1, 2, 3 }, { 4, 5, 6 } };
// 遍历二维数组
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();
}
// 访问特定元素
Console.WriteLine("元素 [1,2] 是: " + matrix[1, 2]);
}
}
9. 总结
- 数组类型:
- 包括一维数组、多维数组(矩阵)、和锯齿数组(不规则数据结构)。
- 操作灵活性:
- 提供了丰富的操作方法,如排序、查找、复制等。
- 选择场景:
- 数组适合处理固定大小、类型一致的结构化数据。
- 如果需要动态大小、复杂数据结构,推荐使用集合(如 List、Dictionary)。
数组是 C# 中基本而重要的存储结构,理解其特性和操作有助于高效编写代码。