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>
  • 多维数组的操作通常比一维数组更复杂,因为它们需要额外的索引来访问元素。
相关推荐
m0_7487080518 分钟前
C++中的观察者模式实战
开发语言·c++·算法
qq_5375626731 分钟前
跨语言调用C++接口
开发语言·c++·算法
wjs202441 分钟前
DOM CDATA
开发语言
Tingjct43 分钟前
【初阶数据结构-二叉树】
c语言·开发语言·数据结构·算法
猷咪1 小时前
C++基础
开发语言·c++
IT·小灰灰1 小时前
30行PHP,利用硅基流动API,网页客服瞬间上线
开发语言·人工智能·aigc·php
快点好好学习吧1 小时前
phpize 依赖 php-config 获取 PHP 信息的庖丁解牛
android·开发语言·php
秦老师Q1 小时前
php入门教程(超详细,一篇就够了!!!)
开发语言·mysql·php·db
烟锁池塘柳01 小时前
解决Google Scholar “We‘re sorry... but your computer or network may be sending automated queries.”的问题
开发语言
是誰萆微了承諾1 小时前
php 对接deepseek
android·开发语言·php