前言
在 C# 编程的广阔领域中,数组就像是一座有序的数据仓库,它以高效、规整的方式存储和管理大量同类型数据。从一维数组的线性排列,到二维数组的行列矩阵,再到复杂的数组操作与经典排序算法,数组的应用贯穿于数据处理、算法实现等多个关键环节。无论是批量处理业务数据,还是构建复杂的数据模型,掌握数组的使用技巧都是程序员进阶之路上的必修课。接下来,就让我们一同开启数组知识的探索之旅,揭开其高效存储与灵活处理数据的奥秘。
7.1 一维数组
7.1.1 数组概述
数组是具有相同数据类型的一组数据的集合。
数组中的变量称为数组的元素。
数组能够容纳元素的数量称为数组的长度。
数组中的每个元素都具有唯一的索引与其相对应,索引从0开始。
7.1.2 一维数组的创建
一维数组的创建是一组相同类型数据的线性结合。
数组作为对象允许使用new关键字进行内存空间分配。
在使用数组之前,必须定义数组变量所属的类型。
1.先声明,再用new 关键字进行内存空间分配
数组元素类型[] 数组名字;
数组名字=new 数组元素类型[数组元素个数];
注意:使用new时,证书类型数组各个元素的初始值都是0。
2.声明的同时为数组分配内存空间
将数组的声明和内存空间分配配合在一起。
数组元素类型[] 数组名 =new 数组元素类型[数组元素的个数];
7.1.3 一维数组的初始化
初始化分为两种:为单个数组元素赋值和同时为整个数组赋值。
1.为单个数组元素赋值
首先声明一个数组,并指定长度,然后为数组中每个元素赋值。
int [] array=new int[5];
arr[0]=1;
arr[1]=2;
arr[2]=3;
arr[3]=4;
arr[4]=5;
或者利用循环单个赋值:
int [] array=new int[5];
for(int i=0;i<arr.Length;i++)
{
arr[i]=i+1;
}
Length:用来获取数组的长度
2.同时为整个数组赋值
需要使用大括号,将要赋值的数据括起来并用逗号隔开。
string [] arrstr=new string[7] {"1","2","3","4","5","6","7"};
或者如下:
string [] arrstr=new string[] {"1","2","3","4","5","6","7"};
或者:
string [] arrstr={"1","2","3","4","5","6","7"};
后两种方法:会自动计算数组的长度。
7.2 二维数组
7.2.1 二维数组的创建
二维数组常用于表示二维表,表中的信息以行和列的形式表示,第一个下标代表元素所在的行,第二个下标代表元素所在的列。
声明格式如下:
type[,] arrayName
type[] [] arrayname
type:二维数组的数据类型
arrayName:二维数组的名称
1.直接每一维分配内存空间
int [,] a=new int [3,4];//定义了一个3行4列的int类型二维数组
2.分别为每一维分配内存空间
int [][] a=new int [2] [];
a[0]=new int [2];//初始化第一行有2个元素
a[1]=new int [3];//初始化第二行有3个元素
7.2.2 二位数组的初始化
1.为单个二维数组元素赋值
首先定义一个二维数组,并指定行数和列数,然后为二维数组中的每个元素赋值。
int [,] arr=new int [2,2];
arr[0,0]=0;
arr[0,1]=1;
arr[1,0]=1;
arr[1,1]=2;
2.为每一维数组元素赋值
首先需要使用“数组元素类型 [ ] [ ]”声明一个数组,并指定数组的行数,然后赋值。
int [,] arr=new int [2,2]{{1,2},{0,0}};
或者:
int [,] arr=new int[,]{{1,1},{0,0}};
或者:
int [,] arr={{1,1},{0,0}};
后两种方法会自动子算数组的行数和列数。
7.2.3 不规则数组的定义
int [] [] arr=new int [3] [];
a[0]=new int [1];
a[1]=new int [2];
a[2]=new int [3];
7.2.4获取二维数组的列数
原理:利用Length属性。把二维数组的每一维当做一维数组,利用length获取一维数组的长度。
7.3 数组与Array类
C#中的数组由System.Arrray类派生而来的引用对象。关系图如下:
Array类的常用方法及说明:
7.4 数组的基本操作
7.4.1 数组的输入和输出
数组的输入与输出指的是对不同维数的数组进行输入和输出操作。可以用for实现。
1.一维数组的输入与输出
一般使用单层循环实现:
int [] arr=new int[5]{1,2,3,4,5};
for(int i=0;i<arr.length;i++)
{
console。write(arr[i]+" ");
}
2.二维数组的输入与输出
一般使用双层循环语句实现。
int [,] arr=new int[3,3]{{1,2,3},{1,2,3},{1,2,3}};
for(int i=0;i<arr.length;i++)
for(int j=0;j<arr[i].length;j++)
{
console.write(arr[i][j]+" ");
}
7.4.2 使用foreach语句遍历数组
该语句可以用来遍历集合中的每个元素,而数组也属于集合类型,因此foreach可以遍历数组。
语法:
foreach ([类型] [迭代变量名] in [集合])
{
语句
}
注意:
(1)【类型】 【迭代变量名】用于声明迭代变量,迭代变量相当于一个范围覆盖整个语句块的局部变量,在foreach语句执行期间,迭代变量表示当前正在为其执行迭代的集合元素;
(2)【集合】必须有一个从该集合的元素类型到迭代变量的类型的显式转换;如果集合的值为null,则会出现异常。
(3)foreach语句通常用来遍历集合,而数组也是一种简单的集合。
7.4.3 对数组进行排序
1.Sort方法
Array.Sort方法:对一维Array数组中的元素进行排序。(默认是从小到大排序)
public static void Sort(Array array)
public static void Sort(Array array,int index,int length)
array:要排序的移位array数组。
index:排序范围的起始索引。
lenth:排序范围内的元素数。
2.Reverse方法
Array.Reverse方法:用于反转一维Array数组中元素的顺序。
public static void Reverse(Array array)
public static void Reverse(Array array,int index.int length)
array:要反转的一维数组。
index:要反转的起始索引。
length:要反转的部分中的元素数。
7.5 数组排序方法
7.5.1 冒泡排序算法
它排序数组元素的过程总是小数往前放,大数往后发放。
1.基本思想
比较相邻的元素值,如果满足条件就交换元素值,把较小的元素移动到数组前面,把大的元素移动数组后面。
2.计算过程
(1) 双层循环实现。
(2)外层循环用于控制排序轮数,一般是要排序的数组的长度减1次,因为最后一次循环只剩下一个数组元素,不需要比较,这时已经排序完成了。
(3)内存循环主要用于比较数组中每个邻近元素的大小,以确定是否交换位置。
排序过程如下:
3.流程图
7.5.2 选择排序算法
该方法比冒泡排序算法快,也是常用的。
1.基本思想
将指定排序位置与其他数组元素分别进行比较没如果满足条件就交换元素值。
与冒泡排序算法相比交换次数少很多,因此速度快。
2.计算过程
(1)每一轮从待排序的数据元素中选出最小(或最大)的一个元素,按排序放在已排好序的数列的最后,直到全部待排序的数据元素排完。
(2)排序过程如下:
3.流程图
结尾
C# 中的数组,凭借丰富的创建、初始化方式,多样的操作方法以及经典的排序算法,为数据处理提供了强大而灵活的解决方案。从基础的数组声明到复杂的多维数组应用,从简单的遍历操作到高效的排序实现,每一部分知识都紧密关联,共同构建起数组应用的完整体系。熟练掌握这些内容,不仅能让我们在编程时更高效地处理数据,还能为解决复杂问题提供清晰的思路。希望大家在后续的编程实践中,不断运用数组知识,挖掘其更多潜力,创造出更优质的代码!若在学习过程中有任何疑问或新发现,欢迎随时交流分享。