当前位置: 首页 > news >正文

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]);
http://www.jsqmd.com/news/886256/

相关文章:

  • 终极Chrome画中画扩展:如何在浏览器中实现高效视频多任务处理
  • 猫抓浏览器扩展:构建高效流媒体资源嗅探与下载的终极解决方案
  • 13-3 节点流(或文件流)
  • 单片机毕业设计——基于STM32智能温室控制系统设计与实现 要怎么设计与实现呢(全程可免费指导)
  • 为什么你的Claude集成测试总在凌晨报警?揭秘3类隐性上下文泄漏缺陷及4种防御型断言设计
  • 智慧树课程自动化脚本终极指南:从零到精通的全方位解析
  • 基于遗传算法-支持向量机的粗糙度加工工艺参数选择附Matlab代码
  • 【独家首发】Midjourney噪点强度量化模型(NOISE-Index™ v1.2):基于12,847组测试图谱建立的PSNR/SSIM/Perceptual Noise三维评估体系
  • MoveIt2完整指南:从零开始掌握ROS 2机器人运动规划的终极教程
  • 微信聊天记录取证与备份:从EnMicroMsg.db解密到完整导出实战指南
  • 漏洞修复窗口正在关闭,DeepSeek辅助扫描的72小时响应黄金法则,你掌握了吗?
  • Unity战斗角色资源包深度解析:动画事件与状态机工程实践
  • 探索Windows 10上的Android世界:揭秘WSA-Windows-10项目的3个技术突破
  • Ventoy架构深度解析:多系统启动解决方案的终极技术实现
  • JWT原理与安全实践:从电子身份证到共享密钥治理
  • Spring AI 的核心设计思想是什么?它解决了 Java 开发者接入大模型时的哪些痛点?
  • 2026年北京本地迷你仓租赁综合因素对比,最值得选择的是谁? - 企业深度横评dyy6420
  • 还在用Excel排产?制造业车间调度的坑我替你们踩过了,APS如何更优解?
  • 昇腾NPU的推理部署:triton-inference-server-ge-backend实战
  • 企业内统一API网关与Taotoken聚合平台对接方案
  • Lilac数据探索:如何通过语义搜索发现数据集隐藏价值
  • 高效智能资源下载:一站式解决多平台内容保存难题
  • Claude数据库设计辅助的5层校验机制(语义一致性、事务边界、时序依赖、权限映射、迁移兼容性),行业首份技术白皮书级解析
  • 《我看见的世界:李飞飞自传》第7-12章阅读笔记:从ImageNet到以人为本的AI
  • 抖音视频怎么下载到手机?2026年5种实测方法 - 科技大爆炸
  • FFF的Webhook集成:搜索结果实时推送到其他系统的终极指南
  • TShape框架:基于多尺度卷积与双注意力机制的时间序列形态异常检测
  • 矩阵乘法模板如何做到 92-98% 手写性能?深度拆解 catlass 的实现
  • 2026年全球ODM电脑代工公司综合实力排行盘点 - 奔跑123
  • 大数据开发薪资翻倍?2026年大模型应用开发速成指南!本科即可转岗高薪赛道