Welcome

首页 / 软件开发 / C# / (教学思路 C#数组二)数组的属性、foreach遍历、交错数组与矩形数组的区别

(教学思路 C#数组二)数组的属性、foreach遍历、交错数组与矩形数组的区别2011-07-16 博各园 叶子文文本次课我们要学习数组的属性、foreach的用法、我上节课提到的交错数组,我会通过多个例子的演示讲解让你们理解交错数组定义已经与规则的二维数组(矩形数组)的区别加深理解,下一节我们还将学习数组的常用方法。

下面我们来学习一下数组的属性,什么是属性呢?在以后学习类的时候我会给大家详细的讲解,现在我给你们举个现实生活的例子,帮助你们理解什么叫属性,属性一般都是名词,表示它的所有者(即对象)拥有的特性,如抹布(对象)的颜色、大小(属性),而下一节将学习的数组的方法一般是动词,如抹布的功能,抹布(对象)清除(方法)桌面、车辆、地面(这些动作的宾语也可以比喻成以后要学习的参数),现在你们就记住属性是描述对象的特性的,一般是名词,方法是描述对象功能的,一般是动词。那数组有哪些属性呢?

数组的属性:Array.Length数组的容量

利用这个属性,我们可以取得数组对象允许存储的容量值,也就是数组的长度、元素个数,这个比较好理解,数组还有其他的属性,比如数组的维数等,属性的用法比较简单,学会一种,其他的格式基本一致,这里我们就不举例了。

在上一节最后一个例子时我们用到了通过索引(index)得到数组元素的值Array[index],但是当数组的维数、容量较多时,采用索引这种方法就会繁杂,不仅代码量大也会降低编程效率,针对这个问题C#提供了foreach语句,专门用来读取集合/数组中的所有元素,我们把这种功能叫做遍历。语法书写如下:

遍历数组:foreach(type objName in collection/Array)

这段语句会逐一检查数组中的所存储的变量值,并且一一将其取出,其中的type是你所要读取的数组对象将要存储在objName变量的数据类型,而objName是定义了一个type类型的变量名,代表每一次从集合和数组(collection/Array)中取得的元素,collection/Array则是所要存取的数组对象。用这种方法只需写一个foreach就可以遍历出除交错数组以外的所有维数的数组。

注:objName的数据类型type必须与collection/Array对象的类型相同或比它大。

下面我们举一个用foreach和for遍历规则数组的例子,其中涉及到了一个数组得到维数的方法,比较foreach在一次性遍历规则数组上的优势。

int[,,] a = new int[2, 2, 2] { {{ 1, 2 }, { 3,4}},{{ 5, 6 }, { 7,8}} };//定义一个2行2列2纵深的3维数组a
for (int i = 0; i < a.GetLength (0) ;i++ ) //用Array.GetLength(n)得到数组[0,1,,,n]上的维数的元素数,0代表行,1列,n代表此数组是n+1维
{
for (int j = 0; j < a.GetLength(1); j++)
{
for (int z = 0; z< a.GetLength(2);z++ )//2代表得到纵深上的元素数,如果数组有n维就得写n个for循环
{
Console.WriteLine(a[i,j,z]);
}
}
}

用foreach循环一次性遍历a数组

int[,,] a = new int[2, 2, 2] { {{ 1, 2 }, { 3,4}},{{ 5, 6 }, { 7,8}} };//定义一个2行2列2纵深的3维数组a
foreach(int i in a)
{
Console .WriteLine (i);
}