当前位置: 首页 > article >正文

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>
  • 多维数组的操作通常比一维数组更复杂,因为它们需要额外的索引来访问元素。

http://www.kler.cn/a/299754.html

相关文章:

  • 适配器模式
  • 剑指 Offer II 008. 和大于等于 target 的最短子数组
  • c#使用log4Net配置日志文件
  • 算法12(力扣739)-每日温度
  • window中80端口被占用问题
  • 您与此网站之间建立的连接不安全
  • 平板电脑开发软件思路——客户现场编译—SAAS本地化及未来之窗行业应用跨平台架构
  • 你真的了解电阻吗
  • 【文献阅读】Social Robot Detection Method with Improved Graph Neural Networks
  • java读取MultipartFile文件excel文件内容
  • 为什么windows系统cmd窗口中文会乱码?
  • qt 槽函数中获取发射信号的对象(widget)
  • 【题解单调队列优化dp】划分
  • 数据结构(14)——哈希表(1)
  • Winform实现石头剪刀布小游戏
  • 基于 SpringBoot 的实习管理系统
  • com.alibaba.druid.pool.DruidDataSource error
  • LVS负载均衡有几种工作方式?
  • 旋翼无人机的应用场景和用途!!!
  • 【安全漏洞】Mybatis-PageHelper 分页SQL注入漏洞
  • 深度学习数据集
  • pandas to_sql函数参数详解
  • 基于深度学习 卷积神经网络resnext50的中医舌苔分类系统
  • 使用@test-library/react的screen中的方法和直接使用getByText,getByTestId等的区别?
  • 面试题—Java基础
  • 计算机网络 ---- 电路交换、报文交换、分组交换性能分析