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

相关推荐
wen__xvn20 分钟前
九日集训第六天
数据结构·算法·leetcode
eyexin20183 小时前
大模型量化与剪枝
算法·机器学习·剪枝
普通网友3 小时前
C# 中委托和事件的深度剖析与应用场景
java·算法·c#
安全系统学习4 小时前
网络安全之任意文件读取利用
算法·安全·web安全·网络安全·哈希算法
电院工程师4 小时前
2.4 Python基础概念:通过一个文字冒险游戏学习编程
开发语言·python·学习·算法·游戏·游戏程序
没故事的燕同学4 小时前
[GESP202306 三级] 密码合规
算法
贰拾wan4 小时前
ArrayList源码分析
java·数据结构
豆沙沙包?5 小时前
2025年- H82-Lc190--322.零钱兑换(动态规划)--Java版
java·算法·动态规划
Coovally AI模型快速验证5 小时前
数据集分享 | 电力检测数据集,助力AI守护电网安全
人工智能·算法·安全·计算机视觉·目标跟踪