ITPub博客

首页 > Linux操作系统 > Linux操作系统 > C#数组教程

C#数组教程

原创 Linux操作系统 作者:大可山 时间:2009-02-24 19:26:15 0 删除 编辑

C#数组教程

第二篇:C#数组教程之2

第三篇:C#数组教程之3

I、基础部分

一、数组概述

·数组是一组具有相同类型和名称的变量的集合。

·这些变量称为数组的元素,每个数组元素都有一个编号,这个编号叫做下标,我们可以通过下标来区别这些元素。

·数组元素的个数被称为数组的长度。

·一般情况下,数组的元素类型必须相同。但在PHP等中有所改变。

·C#中,数组是System.Array类的一个实例。

·优缺点:优点:高效访问给定下标的元素,编程简单、直观。缺点:实例化时必须指定数组的大小,之后不能增删元素(也就是非动态)。

C#中的数组:

· C# 数组中每个元素的类型必须相同;

· C# 数组的下标是从 0 开始;

· C# 中没有动态数组,但可以用ArrayList实现类似动态数组的功能;

· C# 中支持多维数组及交错数组(Jagged Array)。

C# 支持一维数组、多维数组(矩形数组)和锯齿型数组(或叫交错数组,数组的数组)。

二、声明、实例化和初始化数组

1.声明数组

下面的示例展示如何声明不同类型的数组:

一维数组:

int[] numbers;

多维数组:

string[,] names;

交错数组(数组中的数组):

byte[][] scores;

2、实例化数组

声明数组(如上所示)并不实际创建它们。在 C# 中,数组是对象(事实上,C#和.NET Framework中的所有东西都是对象),必须进行实例化。下面的示例展示如何创建数组:

一维数组:

int[] numbers = new int[5];

常见问题:

int[3] arr; //错误,不能这样指定数组大小

应该是:

int[] arr = new int[3]; //正确,声明一个长度为 3 的 int 类型数组,[]中的数字表示长度不是下标的上界。

多维数组:

string[,] names = new string[5,4];

交错数组(锯齿数组或“数组的数组”):

交错数组是指数组的元素又是一个数组,这和多维数组是不一样的,也就是说,交错数组就是“数组的数组”。

byte[][] scores = new byte[5][];

for (int x = 0; x < scores.Length; x++) 

{

   scores[x] = new byte[4];

}

还可以有更大的数组。例如,可以有三维的矩形数组:

int[,,] buttons = new int[4,5,3];

甚至可以将矩形数组和交错数组混合使用。例如,下面的代码声明了类型为 int 的二维数组的三维数组的一维数组。

int[][,,][,] numbers;

声明数组

int[][] arr = new int[3][];

arr[0] = new int[7];

arr[1] = new int[8];

arr[2] = new int[9];

以上数组中 arr 是一个长度为 3 的数组。

arr 的第一个元素是一个长度为 7 的数组,第二个元素是一个长度为 8 的数组,第三个元素是一个长度为 9 的数组。

一定注意: int[][] arr = new int[3][]; 不能写成 int[] arr = new int[3];

另外,初始化时第二个中括号中也不能有数值。

3、初始化数组

C# 通过将初始值括在大括号 ({}) 内为在声明时初始化数组提供了简单而直接了当的方法。下面的示例展示初始化不同类型的数组的各种方法。

如上述的numbers可以用下面方式初始化:

numbers[0] = 1;

numbers[1] = 2;

numbers[2] = 3;

numbers[3] = 4;

numbers[4] = 5;

上述初始化方式很不简洁,较简洁的方式是:

numbers = new int[]{1,2,3,4,5};

4.简洁化的做法

事实上,可以将声明、实例化和初始化放在一起,变得更加简洁方便,比如:

一维数组

声明数组并赋初值

int[] numbers = new int[]{1,2,3,4,5,6}; //不定长 

int[] numbers = new int[5] {1, 2, 3, 4, 5};//定长

string[] names = new string[3] {"Matt", "Joanne", "Robert"};

Note: [] 跟在类型名之后表示是个数组,{} 表示要赋的初值列表,各个初值之间用英文逗号(,)隔开。

可省略数组的大小,如下所示:

int[] numbers = new int[] {1, 2, 3, 4, 5};

string[] names = new string[] {"Matt", "Joanne", "Robert"};

如果提供了初始值设定项,则还可以省略 new 运算符,如下所示:

int[] numbers = {1, 2, 3, 4, 5};

string[] names = {"Matt", "Joanne", "Robert"};

C# 数组也支持动态指定

int len = 3;

int[] arr = new int[len];

多维数组

int[,] numbers = new int[3, 2] { {1, 2}, {3, 4}, {5, 6} };//定长

第一维的长度为 3,第二维的长度为 2。

string[,] siblings = new string[2, 2] { {"Johnson","Ju"}, {"Mary","Albert"} };

可省略数组的大小,如:

int[,] numbers = new int[,] { {1, 2}, {3, 4}, {5, 6} };

string[,] siblings = new string[,] { {"Johnson","Ju"}, {"Mary","Albert"} };

如提供了初始值设定项,则还可以省略 new 运算符,如:

int[,] numbers = { {1, 2}, {3, 4}, {5, 6} };

赋值为“横向扫描”赋值,该例相当于:

numbers[0, 0] = 1;

numbers[0, 1] = 2;

numbers[1, 0] = 3;

numbers[1, 1] = 4;

numbers[2, 0] = 5;

numbers[2, 1] = 6;

string[,] siblings = { {"Johnson", "Ju"}, {"Mary", "Albert"} };

交错的数组(数组的数组)

可以像下例所示那样初始化交错的数组:

int[][] numbers = new int[2][] { new int[] {2,3,4}, new int[] {5,6,7,8,9} };

可省略第一个数组的大小,如下所示:

int[][] numbers = new int[][] { new int[] {2,3,4}, new int[] {5,6,7,8,9} };

或:

int[][] numbers = { new int[] {2,3,4}, new int[] {5,6,7,8,9} };

请注意,对于交错数组的元素没有初始化语法。

int[][] arr = new int[2][];

numbers[0] = new int[3];

numbers[1] = new int[5];

numbers[0][0] = 2;

如果此时设置:

numbers[0][2] = 6;那么:

numbers = { new int[] {2,3,6}, new int[] {5,6,7,8,9} };

我们可以把numbers当作一个一维数组来对待,数组的数组又可以当作一维数组来对待。

交错数组也可以是“数组的数组的数组”,以此类推:

int[][][] arr = new int[3][][];

arr[0] = new int[7][];

arr[0][0] = new int[3];

//...

注意   如果在声明时没有初始化数组,则数组成员将自动初始化为该数组类型的默认初始值。另外,如果将数组声明为某类型的字段,则当实例化该类型时它将被设置为默认值 null。

三、数组的赋值取值

1、访问数组成员

访问数组成员可以直接进行,类似于在 C/C++ 中访问数组成员。

(1)位置定位法

例如:

int[] arr = new int[3];

arr[0] = 10; //给第一个元素赋值

int m = arr[0]; //取第一个元素的值

下面的代码创建一个名为 numbers 的数组,然后向该数组的第五个元素赋以 5:

int[] numbers = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0};

numbers[4] = 5; //注意索引是从0开始

下面的代码声明一个多维数组,并向位于 [1, 1] 的成员赋以 5:

int[,] numbers = { {1, 2}, {3, 4}, {5, 6}, {7, 8}, {9, 10} };

numbers[1, 1] = 5;

下面声明一个一维交错数组,它包含两个元素。第一个元素是两个整数的数组,第二个元素是三个整数的数组:

int[][] numbers = new int[][] { new int[] {1, 2}, new int[] {3, 4, 5}

};

下面的语句向第一个数组的第一个元素赋以 58,向第二个数组的第二个元素赋以 667:

numbers[0][0] = 58;

numbers[1][1] = 667;

(2)循环访问法

对数组使用 foreach

C# 还提供 foreach 语句。该语句提供一种简单、明了的方法来循环访问数组的元素。例如,下面的代码创建一个名为 numbers 的数组,并用 foreach 语句循环访问该数组:

int[] numbers = {4, 5, 6, 1, 2, 3, -2, -1, 0};

foreach (int i in numbers)

{

   System.Console.WriteLine(i);

}

由于有了多维数组,可以使用相垃圾广告法来循环访问元素,例如:

int[,] numbers = new int[3, 2] {{111}, {222}, {333}};

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/14601556/viewspace-557617/,如需转载,请注明出处,否则将追究法律责任。

下一篇: C#数组教程之2
请登录后发表评论 登录
全部评论
IT人士,爱好编程的码农。

注册时间:2008-06-19

  • 博文量
    118
  • 访问量
    690364