目录
前言
数组
创建数组实例
数组的初始化
访问数组元素
数组的属性与方法
前言
如果需要使用同一类型的多个对象,就可以使用数组。
数组是一种数据结构,可以包含同一类型的多个元素。数组中包含的数据(又称数组的元素)具有相同的类型,该类型称为数组的元素类型。
数组的元素类型可以是任意类型,包括数组类型。
数组
数组有一个“秩”,它确定和每个数组元素关联的索引个数。数组的秩又称为数组的维度。“秩”为 1 的数组称为一维数组。
int[] myArray;
“秩”大于 1 的数组称为多维数组。
数组的声明
在声明数组时,应先定义数组中元素的类型,其后是一个空方括号和一个变量名。其语法格式如下:
数组类型[] 数组名;
例如,下面声明了一个包含整型元素的数组:
int[] myArray;
创建数组实例
声明一个数组时,不需要指定数组的大小,因此在声明数组时并不分配内存,而只有在创建数组实例时,才指定数组的大小,同时给数组分配相应大小的内存,以保存数组的所有元素。
数组是引用类型,所以必须给它分配堆上的内存。因此,使用 new 运算符来指定数组中元素的类型和数量来初始化数组的变量。其语法格式如下:
数组变量名=new 数组类型[数组长度]
例如,下面声明了一个包含整型元素的数组:
int[] myArray=new int[10];
或者:
int[]myArray; //声明数组变量myArray = new int[10]; //分配能存放 10 个整型值的存储空间。
在声明和初始化后,变量 myArray 就引用了 10 个整型值,它们位于托管堆上,如图所示。
数组的初始化
在创建数组实例时,系统会使用不同数据类型的默认值(0、null、 false)对数组元素赋初值,对不同的数组元素,分别赋不同的初值,数字型初值为0、引用类型初值为null
还可以使用数组初始化器为数组的每个元素赋值。数组初始化器只能在声明数组变量时使用,不能在声明数组之后使用。其语法格式:
数组类型[] 数组名=new 数组类型[数组长度 n]{元素 1,元素 2... 元素 n}例如: int[] myArray = new int[4] {4, 7, 11, 2};
在这里初始化数组元素的个数必须和定义的数组长度 n 相等。
如果用花括号初始化数组,还可以不指定数组的大小,因为编译器会计算出元素的个数:
例如: int[] myArray = new int[] {4, 7, 11, 2};
使用 C#编译器还有一种更简化的形式。使用花括号可以同时声明和初始化数组,编译器生成的代码与前面的例子相同,格式为:
数组类型[] 数组名= {元素 1,元素 2... 元素 n}例如:int[] myArray = {4, 7, 11, 2};
另外,大括号中的值不一定是常量,也可以是由运算(如函数、数学运算等)得来的值, 例如:
int[] numbers = new int[10] { 1, 2, 3, (int) (System.Math.Pow(2, 2)), 5, 6, 7, 8, 9, 2 * 5 };
访问数组元素
如果要访问数组中的数组元素,就需要将数组名与下标(即索引号)结合起来,数组只支持有整型参数的索引器。
下标用以标明数组元素在数组中的位置。数组元素的索引值是从 0 开始的。
访问一维数组中的单个数组元素的一般形式如下:
<数组名> [<下标>]
在下面的例子中,数组 myArray 用 4 个整型值声明和初始化。用索引器 0、1、2、3 就可以访问该数组中的元素。
int[] myArray = new int[] {4, 7, 11, 2};int v1 = myArray[0]; // 读第一个元素int v2 = myArray[1]; // 读第二个元素myArray[3] = 44; // 修改第四个元素的值
注意:如果使用错误的索引器值,就会抛出 IndexOutOfRangeException 类型的异常。
如果不知道数组中的元素个数,使用 Length 属性 int elemNum=myArray.length;
数组的属性与方法
在 C# 中,数组是对象。System.Array 是所有数组类型的抽象基类型。提供创建、操作、搜索和排序数组的方法,常用的属性和方法有:
Length 属性: 表示数组包含多少个元素。
Rank 属性:Rank 属性是只读属性,用于返回数组的维数。
使用 Rank 属性的一般形式为:<数组名>.Rank
Clear 方法:清除数组中所有元素的值,重新初始化数组中所有的元素。即把数组中的指定元素设置为 0、false 或 null,其语法格式为:
Array.Clear(<要清除的数组名>,<要清除的第一个元素的索引>,<要清除元素的个数>)
Copy 方法:是 System.Array 类提供的一个静态方法。其作用是将一个数组的内容复制给另外一个数组,并指定复制元素的个数,其语法格式为:
Array.Copy(<被复制的数组>, <目标数组>, <复制元素的个数>)
例如:
int[] numbers = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };int[] copy = new int[numbers.Length];Array.Copy(numbers, copy, copy.Length);
CopyTo 方法:CopyTo 方法与 Copy 方法一样,其作用是将一个数组的内容复制给另外一个数组,并从指定的索引处开始复制,其语法格式为:
<被复制的数组>.CopyTo(<目标数组>, <复制的起始索引>)
例如:
int[] numbers = new int[] { 1,2,3, 4, 5, 6, 7, 8, 9, 10 };int[] copy = new int[numbers.Length];numbers.CopyTo(copy,0);
Sort 方法:Sort 方法可以将数组中的元素按升序排列。其格式为:Array.Sort(数组名称)
Reverse(反转)方法:将该方法与 Sort 方法结合,可以实现降序排序。数组反转方法的使用格式为: Array.Reverse(数组名称,起始位置,反转范围);
GetLowerBound 与 GetUpperBound 方法:GetLowerBound 方法和 GetUpperBound 方法用于返回数组指定维度的下限与上限,其中维度是指数组的维的索引号,同样的维度的索引也是从 0 开始的,即第一维的维度为 0,第二维的维度为 1,……,依此类推。
GetLowerBound 方法和 GetUpperBound 方法的语法格式分别为:
<数组名>.GetLowerBound(<维度>) 和 <数组名>.GetUpperBound (<维度>)