解析C#数组

来源:互联网 发布:win10怎么升级软件 编辑:程序博客网 时间:2024/06/08 10:24

数组是一种数据结构,他使用同一类型的多个对象,其元素在内存中连续存放。C#用特殊的记号如中括号"[]"声明和使用数组。

数组的声明:

先定义数组中元素的类型,其后是一个方括号和一个变量名,如:Int[] myArray;

数组的初始化

数组是引用类型,必须给它分配堆上的内存。对此,应使用new运算符,并且指定数组中元素的类型和元素的数量来初始化数组的变量。如:myArray=new int[4];

在指定了数组的大小后就不能重新设置数组的大小。如果事先不知道数组中应包含多少个元素,得使用集合。

初始化方式:

(1)       int[] myArray;myArray=new int[4];

(2)       int[] myArray=new int[4];

(3)       int[] myArray=new int[4]{4,7,11,2};//数组初始化器只能在声明数组变量时使用,不能在声明数组之后使用。

(4)       int[] myArray=new int[]{4,7,11,2};//不指定数组的大小。编译器会自动计算元素个数。

(5)       int[] myArray={4,7,11,2};//简化形式,编译生成的代码与前4种相同。

访问数组元素:

(1)       通过索引器访问:

Int[] myArray=new int[]{4,7,11,2};

Int v1=myArray[0];//读取第一个元素

Int v2=myArray[1];//读取第二个元素

myArray[3]=44;//为第四个元素赋值

//若使用错误的索引值(访问不存在的元素),则抛出IndexOutOfRangeException异常

(2)       不知道数组元素个数的访问方式:

For(int i=0;i<myArray.Length;i++)

{Console.WriteLine(myArray[i]);}

(3)       使用foreach语句访问:

Foreach(int val in myArray)

{console.WriteLine(val);}

//foreach主要通过IEnumerableIEnumerator接口实现。

使用引用类型:

不但能够声明预定义类型的数组,还可以声明定制类型的数组。

注意:如果数组中的元素是引用类型,就必须为每个数组元素分配内存(分配内存即对象实例化)。若使用了数组中未分配内存的元素,则会抛出NullReferenceException类型的异常。

声明方式与预定义类型的声明方式一样,初始化方式则必须使用实例化后的自定义类。如:

Person[] myPersons={new Person(“f1”,”l1”),new Person(“f2”,”l2”)};

//Person为一个用户自定义类

// Person(“f1”,”l1”)person类的构造函数,第一参数表示firstname,第二个参数表示lastname

多维数组:

申明二维数组时需要在括号中加上一个逗号。数组在初始化时应指定每一维的大小(也称为阶)。访问数组则采用两个整数作为索引器来访问。如:

Int[,] twodim=new int[3,3];//二维数组声明,数组声明之后,不能修改其阶数

Twodim[0,0]=1;//二维数组访问

初始化也可以采用下列方式:

Int[,] twodim={{1,2,3},{4,5,6},{7,8,9}};

使用数组初始化器时,必须初始化数组的每个元素,不能遗漏任何元素。

三维数组声明和初始化如下:

Int[,,] threedim={{{1,2},{3,4}},{{5,6},{7,8}},{{9,10},{11,12}}};

锯齿数组:

二维数组的大小是矩形的。而锯齿数组的大小设置比较灵活,在锯齿数组中,每一行都可以有不同的大小。

锯齿数组又称数组中的数组

在声明锯齿数组时,要一次放置开闭括号。在初始化锯齿数据时,先设置该数组包含的行数。定义各行中元素个数的第二个括号设置为空,以为这类数组的每一行包含不同的元素数。之后为每一行指定行中的元素个数,如:

Int[][] jagged=new int[3][];//二维数组声明使用的是int[,],注意区别

Jagged[0]=new int[2]{1,2};

Jagged[1]=new int[6]{3,4,5,6,7,8};

Jagged[2]=new int[3]{9,10,11};

迭代锯齿数组中所有元素的代码可以使用嵌套for循环。在外层for循环中,迭代每一行,内层的for循环迭代一行中的每个元素:

For(int row=0;row<jagged.Length;row++)

{

For(int element=0;element<jagged[row].Length;element++)

{Console.WriteLine(jagged[row].[element].toString());}
}

原创粉丝点击