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>
  • 多维数组的操作通常比一维数组更复杂,因为它们需要额外的索引来访问元素。
相关推荐
捕鲸叉5 分钟前
创建线程时传递参数给线程
开发语言·c++·算法
A charmer10 分钟前
【C++】vector 类深度解析:探索动态数组的奥秘
开发语言·c++·算法
Peter_chq12 分钟前
【操作系统】基于环形队列的生产消费模型
linux·c语言·开发语言·c++·后端
记录成长java2 小时前
ServletContext,Cookie,HttpSession的使用
java·开发语言·servlet
前端青山2 小时前
Node.js-增强 API 安全性和性能优化
开发语言·前端·javascript·性能优化·前端框架·node.js
睡觉谁叫~~~2 小时前
一文解秘Rust如何与Java互操作
java·开发语言·后端·rust
音徽编程2 小时前
Rust异步运行时框架tokio保姆级教程
开发语言·网络·rust
观音山保我别报错2 小时前
C语言扫雷小游戏
c语言·开发语言·算法
小屁孩大帅-杨一凡3 小时前
java后端请求想接收多个对象入参的数据
java·开发语言
m0_656974743 小时前
C#中的集合类及其使用
开发语言·c#