C#数组的属性和方法(Clear / Copy / IndexOf )

一、数组基础属性回顾

所有数组自带三个核心属性:

cs 复制代码
int[] nums = { 1, 2, 3, 4, 5, 6 };
Console.WriteLine(nums.Length);     // 获取元素总个数:6
Console.WriteLine(nums.Rank);        // 获取数组维度:1(一维数组)
Console.WriteLine(nums.LongLength);  // 64位长度,超大数组使用:6

二、Array.Clear() 清空数组元素

1. 作用

将数组指定范围的元素重置为默认值

  • 值类型(int、double、bool)→ 0 / false

  • 引用类型(string、自定义类)→ null

2. 语法

Array.Clear(数组, 起始下标, 清空长度);

3. 代码案例

cs 复制代码
int[] nums = { 1, 2, 3, 4, 5, 6 };

// 从下标1开始,清空3个元素
Array.Clear(nums, 1, 3);

Console.WriteLine(string.Join("-", nums)); 
// 输出:1-0-0-0-5-6

解析:下标1、2、3 的元素被重置为 int 默认值 0


三、Array.Copy() 数组拷贝(重中之重)

1. 简单重载(整段复制)

语法:Array.Copy(原数组, 目标数组, 复制长度);

cs 复制代码
int[] nums1 = { 1, 2, 3, 4 };
int[] nums2 = new int[nums1.Length]; // 创建空目标数组

// 复制nums1中4个元素到nums2
Array.Copy(nums1, nums2, 4);

// 修改原数组
nums1[0] = 100;

Console.WriteLine(string.Join("-", nums2)); 
// 输出:1-2-3-4 不受影响

2. 深浅拷贝核心区别(必考)

  • 数组存值类型(int、double、bool) :Copy 是值拷贝 修改原数组,不会影响目标数组,互相独立

  • 数组存引用类型(对象、数组) :Copy 是地址拷贝(浅拷贝) 修改原数组内容,会同步影响目标数组

3. 完整重载(精准区间复制)

语法:Array.Copy(原数组, 原起始下标, 目标数组, 目标起始下标, 复制个数);

cs 复制代码
int[] nums1 = { 1, 2, 3, 4 };
int[] nums2 = new int[4];

// 从原数组下标1开始,复制2个元素,放到目标数组下标1位置
Array.Copy(nums1, 1, nums2, 1, 2);

Console.WriteLine(string.Join("-", nums2)); 
// 输出:1-2-3-0

4.=和copy的区别

操作 值类型(int/double) 引用类型(数组 / List / 对象) 结果
= 复制数据 复制地址(共用) 改一个,另一个会变
Copy 复制数据 创建新对象 改一个,另一个不变

5.最简单记忆口诀

  • = 赋值:引用类型共用,值类型独立
  • Copy 复制:永远独立,互不影响

总结

  1. =

    • 值类型:复制数据,独立
    • 引用类型:复制地址,共用对象
  2. Copy

    • 无论什么类型,都创建新数据,完全独立

四、Array.IndexOf() / LastIndexOf() 查找下标

1. 基础用法

cs 复制代码
int[] nums3 = { 1, 2, 3, 4, 3 };

// 正向查找:返回第一个匹配元素下标
Console.WriteLine(Array.IndexOf(nums3, 3));   // 2

// 反向查找:返回最后一个匹配元素下标
Console.WriteLine(Array.LastIndexOf(nums3, 3)); // 4

2. 高级重载(限定查找起始位置)

语法:Array.IndexOf(数组, 目标值, 开始查找下标);

cs 复制代码
// 从下标3开始往后找3
Console.WriteLine(Array.IndexOf(nums3, 3, 3)); // 4

3. 终极重载(限定查找范围)

语法:Array.IndexOf(数组, 目标值, 开始下标, 查找长度);

cs 复制代码
// 从下标3开始,往后查找2个元素范围
Console.WriteLine(Array.IndexOf(nums3, 3, 3, 2)); // 4

4. 查找规则

  • 找到元素:返回对应索引下标

  • 找不到元素:固定返回 -1

  • IndexOf:从左往右找第一个

  • LastIndexOf:从右往左找第一个


五、方法分类记忆

1. 非静态方法(数组对象调用)

Length、Rank、LongLength、ToString()

2. 静态方法(Array 类名调用)

Array.Clear()、Array.Copy()、Array.IndexOf()、Array.LastIndexOf()


六、最终总结(背诵版)

  1. Clear:指定范围重置为默认值,不改变数组长度

  2. Copy:数组拷贝,值类型互不影响,引用类型浅拷贝互相影响

  3. IndexOf:正向查第一个下标,可限定起始位置和查找长度

  4. LastIndexOf:反向查最后一个下标

  5. 查找失败统一返回 -1

  6. string.Join() 可快速遍历拼接、打印数组全部元素

相关推荐
青 春 记 忆20 分钟前
零基础入门Python11|Git实战:为任务管理器建立版本历史
开发语言·git·vscode·python·python3.11
To_OC27 分钟前
LC 239 滑动窗口最大值:从暴力超时到单调队列一遍过
javascript·算法·leetcode
Mh1 小时前
虚拟滚动真的比普通滚动性能更好吗?
前端·javascript·性能优化
余额瞒着我当琳2 小时前
C++--深拷贝三件套 + swap + 写时拷贝 + vector 扩容 + reserve
java·开发语言·c++
坐吃山猪3 小时前
WebClient内存配置解析
开发语言·springboot·webflux
jdksjw3 小时前
同步与异步、阻塞与非阻塞、多线程、协程超详细讲解(Python并发编程从入门到精通)
开发语言·python
Zach_菠萝侠3 小时前
【DeepSeek Harness 研究】进化方向4:安全加固 思考、设计与实现
开发语言·安全·deepseek
SL-staff4 小时前
技术实践:HR如何用JVS-Logic可视化编排实现考勤数据同步(含节点配置与异常处理)
开发语言·python·低代码·钉钉·可视化编排·jvs-logic·hr技术
曹牧4 小时前
C#:数字的定义和表示方式
算法·c#
kyriewen4 小时前
我把 AI 写的并发请求控制器手写了一遍——3 个语义我当时根本讲不清
前端·javascript·面试