🧱 一、数组的本质
数组是用单个变量名管理的一组同类型数据元素,通过索引访问元素:
csharp
myArray[4] // 访问索引为4的元素
- 元素:数组中的独立数据项(必须同类型)
- 秩/维度:数组的维度数量(如二维数组秩=2)
- 维度长度:单维度中的位置数量
- 数组长度:所有维度元素总数
⚠️ 二、关键特性
固定大小
数组创建后长度不可变(C#不支持动态数组)
索引规则
- 索引从0开始
- 维度长度为n时,索引范围:0 → n-1
- 示例:长度为6的数组,有效索引为0~5
🔢 三、数组类型对比
类型 | 特点 | 语法 | 适用场景 |
---|---|---|---|
一维数组 | int[] arr = new int[5]; | 线性数据存储 | 每维度子数组长度相同 |
矩形数组 | 每维度子数组长度相同 | arr[2,3] | arr[2,3] |
交错数组 | 子数组可独立定义长度 | arr[1][0] | 不规则数据(如锯齿状) |
|
🔄 四、多维数组详解
矩形数组(Rectangular Array)
csharp
int[,] rectArray = new int[3,4]; // 3行4列的固定矩阵
int x = rectArray[2,3]; // 访问第3行第4列(单组方括号)所有维度子数组长度强制一致
内存连续存储
交错数组(Jagged Array)
csharp
int[][] jagArray = new int[3][];
jagArray[0] = new int[4]; // 第一行4列
jagArray[1] = new int[2]; // 第二行2列(长度可变!)
int y = jagArray[1][0]; // 多组方括号
- 本质是"数组的数组"
- 每个子数组可独立指定长度
💎 五、核心设计原则
性能取舍
- 矩形数组:内存连续,访问更快
- 交错数组:灵活但内存碎片风险
选择建议
- 数学计算/表格处理 → 矩形数组
- JSON等不规则数据 → 交错数组
安全陷阱
csharp
int[,] arr = new int[5,5];
arr[5,0] = 1; // 抛出IndexOutOfRangeException!
最佳实践:初始化时校验维度长度
csharp
if (i < arr.GetLength(0) && j < arr.GetLength(1))
{
arr[i,j] = value;
}
📚 六、延伸思考
虽然C#数组大小固定,但可通过:
Array.Resize() 创建新数组复制数据(有性能损耗)
使用 List 动态集合类型
内存优化:对超大数组用 Buffer.BlockCopy()