数组是一个存储相同类型元素的固定大小的顺序集合.数组是用来存储数据的集合,通常认为数组是一个同一类型变量的集合.
声明数组变量并不是声明number0,number1,......,number99一个一个单独的变量,而是声明一个就像numbers这样的变量,然后使用number[0],number[1],...,number[99]来表示一个个单独的变量,数组中某个指定的元素是通过索引来访问的.
声明数组
在C#中声明一个数组,您可以使用下面的语法:
datatype[] arrayName;
其中datatype用于指定被存储在数组中的元素的类型,[]指定数组的秩(维度).秩指定数组的大小.
arrayName指定数组的名称.
初始化数组
声明一个数组不会在内存中初始化数组.当初初始化数组变量时,您可以赋值给数组.
数组是一个引用类型,所以需要使用new关键字来创建数组的实例.
例如:
赋值给数组
可以通过使用索引号赋值给一个单独的数组元素,例如
亦或
还可以创建并初始化一个数组,比如:
也可省略数组大小,这样写几个数字,就有几个数字
也可把数组赋值给另一个数组
当创建一个数组时,C#编译器会根据数组类型隐式初始化数组元素为一个默认值,例如,int数组的所有元素都会被初始化为0.
访问数组元素
元素是通过带索引的数组名称来访问的,这是通过把元素的索引放置在数组名称后的方括号中来实现.
例如:
下面是一个实例,使用上面提到的三个概念,即声明.赋值,访问数组:
使用foreach循环
在前面的实例中,我们使用一个for循环来访问每个数组元素,也可以使用foreach语句来遍历数组.
下述实例使用foreach来遍历一个数组:
C#数组细节
在C#中,数组是非常重要的,且需要了解更多的细节.下面列出C#必须清楚的一些与数组相关的重要概念:
概念 | 描述 |
多维数组 | C#支持多维数组.多维数组最简单的形式是二维数组. |
交错数组 | C#支持交错数组,即数组的数组 |
传递数组给函数 | 可以通过指定不带索引的数组名称来给函数传递一个指向性数组的指针. |
参数数组 | 通常用于传递未知数量的参数给函数. |
Array类 | 在System命名空间中定义,是所有数组的基类,并提供了各种用于数组的属性和方法. |
多维数组
C#支持多维数组,多维数组又称为矩形数组.
可以声明一个string变量的二维数组,如下:
或者可以声明一个int变量的三维数组,如下:
二维数组
多维数组最简单的形式是二维数组.一个二维数组,在本质上,是一个一维数组的列表.一个二维数组可以被认为是一个带有x行和y列的表格.下面是一个二维数组,包含3行和4列:
Column0 | Column1 | Column2 | Column3 | Column4 |
Row 0 | a[0][0] | a[0][1] | a[0][2] | a[0][3] |
Row 1 | a[1][0] | a[1][1] | a[1][2] | a[1][3] |
Row 2 | a[2][0] | a[2][1] | a[2][2] | a[2][3] |
因此,数组中的每个元素是使用形式为a[i,j]的元素名称来标识的,其中a是数组名称,i和j是唯一标识a中每个元素的下标.
初始化二维数组
多维数组可以通过在括号内为每行指定值来进行初始化.下面是一个带有3行4列的数组.
访问二维数组元素
二维数组中的元素是通过使用下标(即数组的行索引和列索引)来访问的.例如:
上面的语句将获取数组中第3行第4个元素.可以通过上面的示意图来进行验证,下边的实例会使用嵌套循环来处理二维数组:
交错数组
交错数组是数组的数组.
交错数组是一维数组.
可以声明一个带有int值的交错数组scores,如下所示:
声明一个数组不会在内存中创建数组,创建上面的数组;
可以先初始化一个交错数组,如下所示:
其中,scores是一个由两个整型数组组成的数组 -- scores[0]是一个带有3个整数数组,scores[1]是一个带有4个整数的数组.
下面实例演示了如何使用交错数组:
C#传递数组给函数
在C#中,您可以传递数组作为函数的参数,可以通过指定不带索引的数组名称来给函数传递一个指向数组的指针.
C#参数数组
当声明iger方法时,不能确定要传递给函数作为参数的参数数目.C#参数数组解决了这个问题,参数数组通常用于传递未知数量的参数给函数.
params关键字
在使用数组作为形参时,C#提供了params关键字,使调用数组为形参的方法时,既可以传递数组形参,也可以传递一组数组元素.params的使用格式为:
public 返回类型 方法名称(params 类型名称[] 数组名称)
C# Array类
Array类是C#中所有数组的基类,它是在System命名空间中定义.Array类提供了各种用于数组的属性和方法.
Array类的属性如下表:
序号 | 属性&描述 |
1 | IsFixedSize 获取一个值,该值指示数组是否带有固定大小. |
2 | IsReadOnly 获取一个值,该值指示数组是否只读 |
3 | Length 获取一个32位整数,该值表示所有维度的数组中的元素总数. |
4 | LongLength 获取一个64位整数,该值表示所有维度的数组中的元素总数 |
5 | Rank 获取数组的秩(维度). |
Array类的方法如下表:
序号 | 方法&描述 |
1 | Clear 根据元素的类型,设置数组中某个范围的元素为零,为false或者为null. |
2 | Copy(Array,Array,Int32) 从数组的第一个元素开始复制某个范围的元素到另一个数组的第一个元素位置,长度由一个32位整数指定. |
3 | Copy To(Array,Int32) 从当前的一维数组中复制所有的元素到一个指定的一维数组的指定索引位置.索引由一个32位整数指定. |
4 | GetLength 获取一个32位整数,该值表示指定维度的数组中的元素总数. |
5 | GetLongLength 获取一个64位整数,该值表示指定维度的数组中的元素总数. |
6 | GetLowerBound 获取数组中指定维度的下界. |
7 | GetType 获取当前实例的类型,从对象(Object)继承. |
8 | GetUpperBound 获取数组中指定维度的上界 |
9 | GetValue(Int32) 获取一维数组中指定位置的值.索引由一个32位整数指定. |
10 | IndexOf(Array,Object) 搜索指定的对象返回整个一维数组中第一次出现的索引. |
11 | Reverse(Array) 逆转整个一维数组中元素的顺序. |
12 | SetValue(Object,Int32) 给一维数组中指定位置的元素设置值.索引由一个32位整数指定. |
13 | Sort(Array) 使用数组的每个元素的IComparable实现来排序整个一维数组中的元素. |
14 | ToString 返回一个表示当前对象的字符串.从对象(Object)继承. |
以下是一些Array类的一些方法的用法: