C# 数组定义和常用方法

栏目总目录


一、数组的定义

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

1. 一维数组

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

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

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

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

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

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

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

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

二、数组的常用方法

1. 搜索数组

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

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

2. 排序数组

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

int[] numbers = { 5, 2, 3, 4, 1 };
Array.Sort(numbers);

3. 复制数组

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

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)。

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

5. 数组拼接

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

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方法。

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方法进行反转。

int[] numbers = { 1, 2, 3, 4, 5 };
Array.Reverse(numbers);

8. 数组填充

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

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

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

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

10. 数组转换

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

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

11. 数组批量赋相同值

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

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

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

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

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

13. 数组元素类型转换

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

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

14. 数组与集合的互转

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

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方法都允许使用自定义比较器来对数组或集合进行排序。

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

注意事项

  • 当操作大型数组时,需要注意性能和内存使用。
  • 数组的大小在声明时确定,且不可更改。如果需要动态大小的集合,请考虑使用List<T>
  • 多维数组的操作通常比一维数组更复杂,因为它们需要额外的索引来访问元素。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

語衣

感谢大哥

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值