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

相关推荐
leiming65 小时前
C++ vector容器
开发语言·c++·算法
Xの哲學6 小时前
Linux流量控制: 内核队列的深度剖析
linux·服务器·算法·架构·边缘计算
yaoh.wang6 小时前
力扣(LeetCode) 88: 合并两个有序数组 - 解法思路
python·程序人生·算法·leetcode·面试·职场和发展·双指针
LYFlied7 小时前
【每日算法】 LeetCode 56. 合并区间
前端·算法·leetcode·面试·职场和发展
艾醒7 小时前
大模型原理剖析——多头潜在注意力 (MLA) 详解
算法
艾醒7 小时前
大模型原理剖析——DeepSeek-V3深度解析:671B参数MoE大模型的技术突破与实践
算法
jifengzhiling8 小时前
零极点对消:原理、作用与风险
人工智能·算法
鲨莎分不晴9 小时前
【前沿技术】Offline RL 全解:当强化学习失去“试错”的权利
人工智能·算法·机器学习
XFF不秃头9 小时前
力扣刷题笔记-全排列
c++·笔记·算法·leetcode