C# 数组定义和常用方法

栏目总目录


一、数组的定义

在C#中,数组是一种用于存储固定大小的相同类型元素的集合。数组中的每个元素可以通过索引来访问,索引是从0开始的。

1. 一维数组

一维数组是最简单的数组形式,它存储了一行数据。

csharp 复制代码
// 声明并初始化一个包含5个整数的数组
int[] numbers = new int[5];

// 或者在声明时直接初始化数组元素
int[] numbers2 = { 1, 2, 3, 4, 5 };

// 访问数组元素
int secondNumber = numbers2[1]; // 访问索引为1的元素,即2
2. 多维数组

多维数组用于存储多个维度的数据,如二维数组(矩阵)、三维数组等。

csharp 复制代码
// 声明并初始化一个2x3的二维数组
int[,] matrix = new int[2, 3];

// 或者在声明时直接初始化二维数组元素
int[,] matrix2 = {
    {1, 2, 3},
    {4, 5, 6}
};

// 访问二维数组元素
int element = matrix2[0, 1]; // 访问第一行第二列的元素,即2

二、数组的常用方法

1. 搜索数组

使用Array.IndexOf方法来搜索数组中的元素。

csharp 复制代码
int[] numbers = { 1, 2, 3, 4, 5 };
int index = Array.IndexOf(numbers, 3); // 返回3的索引,即2

2. 排序数组

使用Array.Sort方法对数组进行排序。

csharp 复制代码
int[] numbers = { 5, 2, 3, 4, 1 };
Array.Sort(numbers);

3. 复制数组

使用Array.CopyToArray(如果是集合转数组)进行数组的复制。

csharp 复制代码
int[] original = { 1, 2, 3 };
int[] copy = new int[original.Length];
Array.Copy(original, copy, original.Length);

// 或者对于集合
List<int> list = new List<int> { 1, 2, 3 };
int[] listToArray = list.ToArray();

4. 数组清空

数组的大小是固定的,所以不能直接"清空"数组。但可以将所有元素设置为默认值(如0或null)。

csharp 复制代码
int[] numbers = { 1, 2, 3 };
Array.Clear(numbers, 0, numbers.Length); // 将所有元素设置为0

5. 数组拼接

使用Array.Copy或LINQ的Concat(需要转换为IEnumerable<T>)进行拼接。

csharp 复制代码
int[] first = { 1, 2, 3 };
int[] second = { 4, 5, 6 };
int[] result = new int[first.Length + second.Length];
Array.Copy(first, 0, result, 0, first.Length);
Array.Copy(second, 0, result, first.Length, second.Length);

// 或使用LINQ
var concatenated = first.Concat(second).ToArray();

6. 数组截取

使用Array.Copy进行截取,或者LINQ的TakeSkip方法。

csharp 复制代码
int[] numbers = { 1, 2, 3, 4, 5 };
int[] subset = new int[3];
Array.Copy(numbers, 1, subset, 0, 3); // 截取索引1到3的元素

// 或使用LINQ
var subsetLinq = numbers.Skip(1).Take(3).ToArray();

7. 数组反转

使用Array.Reverse方法进行反转。

csharp 复制代码
int[] numbers = { 1, 2, 3, 4, 5 };
Array.Reverse(numbers);

8. 数组填充

使用Array.Fill方法进行填充。

csharp 复制代码
int[] numbers = new int[5];
Array.Fill(numbers, 0); // 填充所有元素为0

9. 数组切片(在C#中不是直接支持的,但可以用上述方法模拟)

C#不直接支持切片操作,但可以使用Array.Copy或LINQ来实现类似的功能。

10. 数组转换

将数组转换为不同类型的集合或数组,可以使用LINQ的Select等方法。

csharp 复制代码
int[] numbers = { 1, 2, 3 };
var doubled = numbers.Select(n => n * 2).ToArray(); // 转换为新的数组,每个元素都乘以2

11. 数组批量赋相同值

使用LINQ的RepeatToArray方法来实现数组批量赋相同值。

csharp 复制代码
int[] filledArray = Enumerable.Repeat(5, 10).ToArray(); // 创建一个长度为10的数组,所有元素都是5

12. 数组批量操作(如批量修改)

虽然C#标准库中没有直接的批量修改数组元素的API,但可以通过循环或LINQ的Select配合ToArray来实现。

csharp 复制代码
int[] numbers = { 1, 2, 3, 4, 5 };
int[] incremented = numbers.Select(n => n + 1).ToArray(); // 每个元素加1

13. 数组元素类型转换

当需要将数组中的元素转换为另一种类型时,可以使用Array.ConvertAll(对于一维数组)或自定义转换逻辑。

csharp 复制代码
double[] doubles = { 1.0, 2.0, 3.0 };
int[] ints = Array.ConvertAll(doubles, Convert.ToInt32); // 注意:这可能会导致精度丢失

14. 数组与集合的互转

数组可以很容易地转换为集合(如List<T>),反之亦然。

csharp 复制代码
int[] array = { 1, 2, 3 };
List<int> list = new List<int>(array); // 数组转集合

List<int> anotherList = new List<int> { 4, 5, 6 };
int[] anotherArray = anotherList.ToArray(); // 集合转数组

15. 数组排序的自定义比较器

Array.SortList<T>.Sort方法都允许使用自定义比较器来对数组或集合进行排序。

csharp 复制代码
int[] numbers = { 5, 2, 9, 1, 5 };
Array.Sort(numbers, (a, b) => b.CompareTo(a)); // 降序排序

注意事项

  • 当操作大型数组时,需要注意性能和内存使用。
  • 数组的大小在声明时确定,且不可更改。如果需要动态大小的集合,请考虑使用List<T>
  • 多维数组的操作通常比一维数组更复杂,因为它们需要额外的索引来访问元素。
相关推荐
forestsea15 分钟前
Python进阶编程总结
开发语言·python·notepad++
q5673152330 分钟前
使用Java的HttpClient实现文件下载器
java·开发语言·爬虫·scrapy
六bring个六1 小时前
QT上位机笔记
开发语言·笔记·qt
步木木1 小时前
Qt 5.14.2入门(一)写个Hello Qt!程序
开发语言·qt
techdashen1 小时前
Rust主流框架性能比拼: Actix vs Axum vs Rocket
开发语言·后端·rust
普通网友1 小时前
内置AI与浏览器的开源终端Wave Terminal安装与远程连接内网服务器教程
开发语言·后端·golang
南玖yy1 小时前
探索 C 语言数据结构:从基础到实践
c语言·开发语言·数据结构
_清浅2 小时前
JavaScript(JS进阶)
开发语言·前端·javascript·操作系统·html5
Gvemis⁹2 小时前
Scala总结(八)
开发语言·后端·scala
@西瓜@2 小时前
JAVAEE(多线程-线程池)
java·开发语言