当前位置: 首页 > 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.cnnetsun.cn/news/2564179.html

相关文章:

  • STK实战:当无人机遇上手持GPS干扰器,信号链路质量如何评估?
  • Amphenol ICC ND9BCA2B0B线束组件应用解析
  • 企业内统一API网关与Taotoken聚合平台对接方案
  • 实测 okbiye AI 毕业论文写作:从开题到定稿,合规高效的毕业季通关指南
  • 毕业季不再熬夜!2026 九大 AI 毕业论文工具横评,打通从初稿到定稿全流程
  • 漏洞修复窗口正在关闭,DeepSeek辅助扫描的72小时响应黄金法则,你掌握了吗?
  • 【Sora 2 GIF导出终极指南】:20年AI工程实战验证的5步零失败流程(含帧率/分辨率/色彩保真三重避坑清单)
  • 武汉国电华美16875kVA串联谐振试验装置,这手活儿细
  • WaveTools:3分钟打造你的鸣潮专属游戏体验中心
  • 张量重塑算子如何做到零拷贝?深度拆解 ops-tensor 的实现
  • 浅谈C++11 std::async()基础用法示例
  • 用互补晶体管模拟PUT实现纯模拟呼吸灯电路设计与调试
  • Claude Code , Codex, Curser, OpenCode 等 CodeAgent 的实现原理与应用深度研究
  • 如何用Electron打造终极番茄工作法应用:Pomolectron完整指南 [特殊字符]
  • StarRailAssistant:让《崩坏:星穹铁道》的重复操作变得智能高效
  • 技术深度解析:Beyond Compare 5密钥生成器实现原理与架构设计
  • 作为小白,C语言如何从零开始呢
  • 5分钟上手Vueify:Browserify+Vue开发环境快速搭建
  • 如何用Python脚本榨干百度网盘带宽:pan-baidu-download终极指南
  • 真正的人工智能理论:你的心,是如何理解世界的?——从内心的那把尺子说起(三)
  • 什么是Agent?一篇讲清楚
  • 【Nginx】深入理解 Nginx try_files:SPA 路由回退、静态资源兜底与零拷贝优化原理
  • 16个分片+2副本:pg_shard的master_create_worker_shards最佳实践
  • 从Arduino功率扩展板到CE/FCC认证产品:硬件创业全流程实战复盘
  • AI Agent 面试题 958:LangChain框架的核心架构和设计理念详解
  • Pearcleaner:macOS深度清理终极指南,彻底释放磁盘空间
  • 智能办公助手套件,支持Office、WPS各版本!内置大模型可智能对话!文档表格自动处理,文案提炼总结、内容校对、语句润色、文章续写生成、翻译、排版、PPT生成
  • ARM SME2 FMAX指令:浮点向量运算优化指南
  • 航空发动机叶片三维扫描-诺斯顿
  • 从CTF实战到日常开发:手把手教你用Python复现Rabbit算法加解密(附完整代码)