10.C# —— 数组Array

发布时间:2026/5/26 6:09:00

10.C# —— 数组Array 目录一、一维数组1. 数组定义2. 数组赋值4 种常用方式3. 数组操作4. for vs foreach 区别5. object 数组存储不同类型数据二、多维数组1. 多维数组定义2. 核心属性获取数组信息3. 数组操作三、交错数组1. 交错数组定义2. 数组操作交错数组 vs 多维数组四、数组存储引用类型1. 数组的引用传递2. 存储自定义对象数组3. 数组协变父类数组存储子类对象4. 实用工具string.Join五、核心知识点总结数组是存储相同类型数据的固定大小容器所有数组都继承自System.Array通过索引下标从 0 开始操作元素最大索引 数组长度 - 1。一、一维数组一维数组是最基础的数组类型用于存储线性的同类型数据定义、赋值、遍历是核心操作。1. 数组定义语法数据类型[] 变量名;变量名建议加后缀sint[] ages; // 整型数组默认值 0 bool[] sexs; // 布尔数组默认值 false string[] names; // 字符串数组默认值 null char[] chars; // 字符数组默认值 \02. 数组赋值4 种常用方式// 1. 仅指定长度创建空数组 ages new int[10]; // 2. 指定长度 初始化元素长度必须和元素个数一致 names new string[5] {张三, 李四, 王五, 赵六, 孙七}; // 3. 不指定长度由元素个数自动推导 ages new int[] { 1, 2, 3 }; // 4. 字面量简化定义最常用 int[] nums { 1, 2, 3 };3. 数组操作修改元素通过索引赋值索引不能超出范围否则报错string[] msgs new string[100]; msgs[0] 张三; // 正确 // msgs[100] ss; 错误索引超出数组界限最大索引99循环赋值批量给数组元素赋值for (int i 0; i msgs.Length; i) // Length数组长度属性 { msgs[i] i 深度; }获取元素单个获取 批量遍历// 单个获取通过索引 Console.WriteLine(msgs[99]); // 方式1for循环遍历可获取索引支持修改元素 for (int i 0; i msgs.Length; i) { Console.WriteLine(msgs[i] --------); } // 方式2foreach遍历语法简单仅读取元素无法获取索引 foreach (string item in msgs) { Console.WriteLine(item ); }4. for vs foreach 区别for灵活可通过索引访问 / 修改元素能获取元素位置foreach语法简洁仅用于读取元素无法获取索引、不能修改元素位置。5. object 数组存储不同类型数据object是 C# 所有类型的基类可存储任意类型数据开发中优先用泛型此方式了解即可object[] arr new object[5] {1, 2, 3, 张三, true}; foreach (object item in arr) { Console.WriteLine(item); // 输出1、2、3、张三、true }二、多维数组多维数组是矩阵式结构如二维数组 几行几列每个维度长度固定支持二维、三维及更高维度。1. 多维数组定义二维数组数据类型[,] 变量名;三维数组数据类型[,,] 变量名;N 维数组数据类型[N-1个逗号] 变量名;// 1. 指定维度长度创建空数组 int[,] ints new int[2,3]; // 2行3列二维数组 int[,,] ints1 new int[2,3,4]; // 三维数组 // 2. 不指定长度自动推导常用 int[,] ints new int[,] { {1,2,3 }, // 第0行 {4,5,6}, // 第1行 {7,8,9}, // 第2行 };2. 核心属性获取数组信息string[,] strings new string[,] { {孙悟空,猪八戒,沙和尚 }, {刘备,曹操,孙权 } }; Console.WriteLine(strings.Length); // 总元素个数6 Console.WriteLine(strings.Rank); // 维度数2 Console.WriteLine(strings.GetLength(0));// 第0维度长度行数2 Console.WriteLine(strings.GetLength(1));// 第1维度长度列数33. 数组操作获取 / 修改元素数组名[维度1索引, 维度2索引]Console.WriteLine(strings[0,0]); // 输出孙悟空 strings[1,1] 曹孟德; // 修改第1行第1列元素循环遍历嵌套 for 循环按维度遍历// 遍历行第0维度 for (int i 0; i strings.GetLength(0); i) { // 遍历列第1维度 for (int j 0; j strings.GetLength(1); j) { Console.Write(strings[i,j] ); } Console.WriteLine(); // 换行 } // foreach遍历直接读取所有元素无视维度 foreach (var item in strings) { Console.WriteLine(item); }批量赋值string[,] names new string[5, 10]; // 5行10列空数组 for (int i 0; inames.GetLength(0); i) { for (int j 0; j names.GetLength(1); j) { names[i, j] $行:{i} 列:{j}; } }三、交错数组交错数组是数组的数组大数组包含小数组每个小数组长度可以不同这是和多维数组的核心区别。1. 交错数组定义语法数据类型[][] 变量名 new 数据类型[][]{ 小数组1, 小数组2... };// 定义两个长度不同的一维数组 int[] i1s new int[4] {1,2,3,4}; // 长度4 int[] i2s new int[] {1,2,3,4,5}; // 长度5 // 交错数组大数组包含3个小数组长度各不相同 int[][] ints new int[][] { i1s, i2s, new int[]{1,2,3,4,5,999} // 长度6 };2. 数组操作获取 / 修改元素大数组[外层索引][内层索引]// 分步取值 int[] arr ints[1]; // 获取第1个小数组 int a arr[4]; // 输出5 // 一步取值 Console.WriteLine(ints[2][5]); // 输出999 // 修改元素 ints[1][2] 888;循环遍历嵌套循环先遍历大数组再遍历小数组// for循环遍历 for (int i 0; i ints.Length; i) // 遍历外层大数组 { for (int j 0; j ints[i].Length; j) // 遍历内层小数组 { Console.WriteLine($({i}:{j}{ints[i][j]})); } } // foreach遍历 foreach (int[] item in ints) // 先遍历外层数组 { foreach (int item1 in item) // 再遍历内层数组 { Console.WriteLine(item1); } }交错数组 vs 多维数组类型结构特点子数组长度多维数组矩阵式固定结构必须相同交错数组数组嵌套灵活结构可以不同四、数组存储引用类型数组本身是引用类型存储自定义对象引用类型时核心理解引用传递和对象数组。1. 数组的引用传递数组赋值是传递引用地址而非复制数据修改原数组赋值后的数组也会同步变化int[] arr new int[] { 1, 2, 3 }; int[] arr2 arr; // 赋值传递引用 arr[0] 999; // 修改原数组 Console.WriteLine(arr2[0]); // 输出999同步变化2. 存储自定义对象数组先定义类再创建该类的数组批量存储对象// 1. 定义自定义类 public class People { public string Name { get; set; } // 属性 } // 2. 创建对象数组并赋值 People[] p1s new People[10]; // 长度为10的People数组 for (int i 0; i p1s.Length; i) { // 创建对象并赋值 People p1 new People() { Name 学生 i }; p1s[i] p1; // 存入数组 } // 3. 遍历对象数组 foreach (People p in p1s) { Console.WriteLine(p.Name); }3. 数组协变父类数组存储子类对象如果子类继承父类父类数组可以存储子类对象协变// 子类继承父类 public class Student : People { } // 父类数组存储父类子类对象 People[] ps new People[] { new People(){Name张三}, new Student(){Name李四} // 子类对象存入父类数组 };4. 实用工具string.Join快速将数组元素拼接为字符串指定分隔符int[] arr {999,2,3}; Console.WriteLine(string.Join(-, arr)); // 输出999-2-3五、核心知识点总结数组本质固定大小、同类型数据容器继承自Array索引从 0 开始一维数组线性存储for/foreach 遍历支持 object 存储多类型多维数组矩阵结构维度长度固定用GetLength(维度索引)获取长度交错数组数组的数组子数组长度可变语法类型[][]引用类型数组是引用类型赋值传地址对象数组可存储自定义类支持协变。

相关新闻