C#数组完全指南:从基础到多维数组解析

🧱 一、数组的本质

数组是用单个变量名管理的一组同类型数据元素,通过索引访问元素:

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()

相关推荐
charliejohn2 小时前
计算机考研 408 数据结构 树形查找 相关概念及计算题例题
数据结构·考研
NAGNIP7 小时前
一文搞懂机器学习中的特征降维!
算法·面试
NAGNIP7 小时前
一文搞懂机器学习中的特征构造!
算法·面试
Learn Beyond Limits8 小时前
解构语义:从词向量到神经分类|Decoding Semantics: Word Vectors and Neural Classification
人工智能·算法·机器学习·ai·分类·数据挖掘·nlp
你怎么知道我是队长8 小时前
C语言---typedef
c语言·c++·算法
Qhumaing10 小时前
C++学习:【PTA】数据结构 7-1 实验7-1(最小生成树-Prim算法)
c++·学习·算法
Z1Jxxx11 小时前
01序列01序列
开发语言·c++·算法
汽车仪器仪表相关领域13 小时前
全自动化精准检测,赋能高效年检——NHD-6108全自动远、近光检测仪项目实战分享
大数据·人工智能·功能测试·算法·安全·自动化·压力测试
Doro再努力13 小时前
【数据结构08】队列实现及练习
数据结构·算法