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

相关推荐
小指纹1 小时前
图论-最短路Dijkstra算法
数据结构·c++·算法·深度优先·图论
赴3352 小时前
逻辑回归 银行贷款资格判断案列优化 交叉验证,调整阈值,下采样与过采样方法
算法·机器学习·逻辑回归·下采样·交叉验证·过采样·阈值
2501_924878733 小时前
无人机光伏巡检缺陷检出率↑32%:陌讯多模态融合算法实战解析
开发语言·人工智能·算法·视觉检测·无人机
沉睡的无敌雄狮3 小时前
无人机光伏巡检漏检率↓78%!陌讯多模态融合算法实战解析
人工智能·算法·计算机视觉·目标跟踪
magicwt3 小时前
《从零构建大模型》读书笔记
算法
大胖猫L3 小时前
深搜与广搜在 TypeScript 类型递归中的应用
前端·算法
2202_756749694 小时前
02 基于sklearn的机械学习-KNN算法、模型选择与调优(交叉验证、朴素贝叶斯算法、拉普拉斯平滑)、决策树(信息增益、基尼指数)、随机森林
python·算法·决策树·随机森林·机器学习·sklearn
ATaylorSu4 小时前
经典算法之美:冒泡排序的优雅实现
开发语言·笔记·学习·算法
再卷也是菜4 小时前
数据结构(12)二叉树
数据结构
菜鸡nan5 小时前
23th Day| 39.组合总和,40.组合总和II,131.分割回文串
算法·leetcode·职场和发展