C#一维数组

一、数组核心概念

数组是存储相同类型数据的容器,所有数组都基于 Array 类实现。

数组核心特性:

  • 长度固定:数组创建后,大小无法修改

  • 有序存储:元素按照存入顺序排列

  • 索引(下标)操作:所有元素通过索引读写

  • 索引规则:索引从 0 开始,长度从 1 开始;最大索引 = 数组长度 - 1

二、数组定义与各类数组默认值

定义语法:数据类型[] 数组名;

命名规范:数组变量名一般加 s 后缀(names、ages、sexs)

cs 复制代码
int[] ages;      // 整型数组,默认值:0
bool[] sexs;     // 布尔数组,默认值:false
string[] names;  // 字符串数组,默认值:null
char[] chars;    // 字符数组,默认值:\0(空字符)

三、数组四种赋值/初始化方式

cs 复制代码
// 方式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. 创建固定长度数组

cs 复制代码
// 创建长度为100的空字符串数组
string[] msgs = new string[100];

2. 单个元素赋值(通过下标)

cs 复制代码
msgs[0] = "张三";
msgs[1] = "搜索";

// 报错!索引超出数组界限
// msgs[100] = "ss"; 

易错点:数组长度100,合法索引范围为 0~99,超出范围直接报错

3. 循环批量赋值

借助 数组名.Length 获取数组总长度,实现全自动批量赋值

cs 复制代码
for (int i = 0; i < msgs.Length; i++)
{
    msgs[i] = i + "深度";
}

4. 单个元素取值

cs 复制代码
// 取出最后一个元素
Console.WriteLine(msgs[99]);

五、数组两种遍历方式(重点)

1. for 循环遍历

优势:可以获取元素索引下标,支持修改数组元素

cs 复制代码
for (int i = 0; i < msgs.Length; i++)
{
    Console.WriteLine(msgs[i] + "--------");
}

2. foreach 循环遍历

语法:foreach(元素类型 变量名 in 数组)

item 等价于数组中当前遍历到的 msgs[i]

cs 复制代码
foreach (string item in msgs)
{
    Console.WriteLine(item + "++++");
}

3. for 与 foreach 核心区别(必背)

  • foreach :写法简单,仅用于读取数据;缺点:无法获取元素索引、无法修改元素位置

  • for :写法稍繁琐,可以获取索引,支持修改数组元素,功能更全面

六、object 万能数组(存储不同类型数据)

普通数组只能存储单一类型 数据,object 是所有数据类型的父类,可存储任意类型数据(int、string、bool 等)。

拓展:实际开发中存储多类型数据,优先使用 ArrayList、List 集合,不推荐频繁使用 object 数组。

cs 复制代码
// 存储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 循环

  • 直接打印数组变量名,只会输出数组类型名称,不会输出元素内容

八、数组标准模板

cs 复制代码
// 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);
}

九、拓展实战:随机昵称生成器(一维数组随机取值)

cs 复制代码
// 姓氏库、名字库
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]);
相关推荐
玖釉-2 小时前
下一个排列:从字典序到原地算法的完整推导
数据结构·c++·windows·算法
IronMurphy3 小时前
【算法五十】62. 不同路径
算法
过期动态3 小时前
【LeetCode 热题 100】移动零
java·数据结构·算法·leetcode·职场和发展·rabbitmq
计算机安禾4 小时前
【算法分析与设计】第10篇:下界理论与NP完全性初步
大数据·人工智能·算法
水木流年追梦5 小时前
大模型入门-大模型分布式训练2
开发语言·分布式·python·算法·正则表达式·prompt
sali-tec5 小时前
C# 基于OpenCv的视觉工作流-章78-KRT测量
图像处理·人工智能·数码相机·opencv·算法·计算机视觉
菜菜的顾清寒5 小时前
力扣HOT100(32)二叉树的中序遍历
数据结构·算法·leetcode
x2c5 小时前
数据结构:线性表中链表的建立和基本操作(C)
算法