C#一维数组
一、数组核心概念
数组是存储相同类型数据的容器,所有数组都基于 Array 类实现。
数组核心特性:
长度固定:数组创建后,大小无法修改
有序存储:元素按照存入顺序排列
索引(下标)操作:所有元素通过索引读写
索引规则:索引从 0 开始,长度从 1 开始;最大索引 = 数组长度 - 1
二、数组定义与各类数组默认值
定义语法:数据类型[] 数组名;
命名规范:数组变量名一般加 s 后缀(names、ages、sexs)
int[] ages; // 整型数组,默认值:0 bool[] sexs; // 布尔数组,默认值:false string[] names; // 字符串数组,默认值:null char[] chars; // 字符数组,默认值:\0(空字符)三、数组四种赋值/初始化方式
// 方式1:指定长度,创建空数组 int ages = new int[10]; // 方式2:指定长度 + 初始化所有元素 string names = new string[5] { "张三", "张三", "张三", "张三", "张三" }; // 方式3:不指定长度,长度由元素个数自动确定 int ages = new int[] { 1, 2, 3 }; // 方式4:字面量简写(最常用) int[] nums = { 1, 2, 3 };四、数组基础增删改查操作
1. 创建固定长度数组
// 创建长度为100的空字符串数组 string[] msgs = new string[100];2. 单个元素赋值(通过下标)
msgs[0] = "张三"; msgs[1] = "搜索"; // 报错!索引超出数组界限 // msgs[100] = "ss";易错点:数组长度100,合法索引范围为 0~99,超出范围直接报错
3. 循环批量赋值
借助数组名.Length获取数组总长度,实现全自动批量赋值
for (int i = 0; i < msgs.Length; i++) { msgs[i] = i + "深度"; }4. 单个元素取值
// 取出最后一个元素 Console.WriteLine(msgs[99]);五、数组两种遍历方式(重点)
1. for 循环遍历
优势:可以获取元素索引下标,支持修改数组元素
for (int i = 0; i < msgs.Length; i++) { Console.WriteLine(msgs[i] + "--------"); }2. foreach 循环遍历
语法:foreach(元素类型 变量名 in 数组)
item 等价于数组中当前遍历到的msgs[i]
foreach (string item in msgs) { Console.WriteLine(item + "++++"); }3. for 与 foreach 核心区别(必背)
foreach:写法简单,仅用于读取数据;缺点:无法获取元素索引、无法修改元素位置
for:写法稍繁琐,可以获取索引,支持修改数组元素,功能更全面
六、object 万能数组(存储不同类型数据)
普通数组只能存储单一类型数据,object 是所有数据类型的父类,可存储任意类型数据(int、string、bool 等)。
拓展:实际开发中存储多类型数据,优先使用 ArrayList、List 集合,不推荐频繁使用 object 数组。
// 存储int、string、bool多种类型 object[] arr = new object[5] { 1, 2, 3, "张三", true }; // 遍历万能数组 foreach (object item in arr) { Console.WriteLine(item); } // 直接打印数组名,输出:System.Object[] Console.WriteLine(arr);注意:object 类型数据无法直接运算,需要强制类型转换后才能操作
七、数组核心易错点总结
数组长度固定,初始化后不能扩容、缩容
索引从 0 开始,最大索引 = 数组长度 - 1,超出范围报索引越界错误
值类型数组默认值为0/false,引用类型数组默认值为null
foreach 仅可读不可改,需要操作下标必须用 for 循环
直接打印数组变量名,只会输出数组类型名称,不会输出元素内容
八、数组标准模板
// 1. 定义并初始化数组 int[] nums = new int[10] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; // 2. 赋值 nums[3] = 10; // 3. for遍历 for (int i = 0; i < nums.Length; i++) { Console.WriteLine(nums[i]); } // 4. foreach遍历 foreach (int item in nums) { Console.WriteLine(item); }九、拓展实战:随机昵称生成器(一维数组随机取值)
// 姓氏库、名字库 string[] xings = { "赵", "钱", "孙", "李", "诸葛", "夏侯", "东方", "欧阳" }; string[] names1 = { "亮", "娜娜", "月初", "惇", "匡胤", "多多", "权", "世民" }; Random rnd = new Random(); // 随机下标:范围 0 ~ 数组长度-1 int index = rnd.Next(0, xings.Length); int index1 = rnd.Next(0, names1.Length); // 拼接随机昵称 Console.WriteLine(xings[index] + names1[index1]);