欢迎来到.net学习网

欢迎联系站长一起更新本网站!QQ:879621940

您当前所在位置:首页 »  .NET本质论第一卷:公共语言运行库教程 » 正文

本教程章节列表

一维数组、多维数组、矩形数组与交错数组

创建时间:2012年11月27日 21:22  阅读次数:(4271)
分享到:
一个数组由零个或多个元素组成。这些元素可通过位置访问,并且它们必须是统一的类型。对于值类型的数组,每个元素恰好是同一类型(例如,System.Int32)的实例。对于引用类型的数组,母个元素可能引用至少支持元素类型的实例,而实际上,该元素引用的是派生类型的实例。

在一维数组中,数组元素前面被加上一个长度字段,用以标明该数组的容量。当创建一个数组时,你就设置了这个字段,并且该字段在数组的生存期内是小能改变的。当你最初实例化数组时,CLR将它的元素设为默认值。一旦实例化了一个数组,你就可以像处理—个类型的其他任何字段那样处理数组的元素,只是访问它们时需要通过索引而不是名字。图5.13是一个各个元素已被赋值的值类型的数组。对于引用类型,每个元素都被初始化为null。必须用有效对象引用重写这些元素之后,才能使用它们。图5.14所示的是一个各个元素均已被赋值的引用类型的数组。尽管数组的内容在它被创建后可以改变,但数组的实际结构和容量是不变的,并且只往创建时被设置。CLR提供了更高级的集台类(例如,System。Collections.ArrayList)用于动态地调整集合的大小。有趣的是数组的容量不是其类型的一部分。例如,考虑下面的c#变量声明:
int[] rgn=new int[100];

注意,该变量的类型并没有标明数组的容量,这个决定被推迟,直到new操作符被使用的时候。这是因为数组的类型只取决于其元素类型和维数,而不是它的实际大小。




在CLR中,数组可以是多维的。对于多维数组,推荐的格式是矩形的( rectangular)或者C风格的数组。矩形数组的元素存储在连续的块中,如图5.15所示。多维数组不仅包含每一维的容量,还包含每一维的下限(lower bound)的索引。尽管在数组中存在下限,但是CLR并不支持非零下限的数组。



矩形数组的每一行的容量都必须相同,这也是我们使用术语矩形(rectangulaf)的原因所在。示例5.12是一个简单的矩形数组程序。这里使用逗号划分每一维的索引,并通过GetLength方法确定每一维的长度。对于矩形数组,Length属性返回所有维的元素总数(例如,对于一个MXN二维数组,Length返叵M*N)。此外,在c#中矩形数组有几种初始化的语法,其最简洁的形式如下:
Int[,] matrix={{1,2,3,4,},{2,4,6,8},{3,6,9,12}};

示例5.12 创建和使用多维数组
//声明对Int32的二维数组的引用
Int[,] matrix;
//分配3X4个元素的数组
Matrix=new int[3,4];
//依次遍历所有元素
For(int i=0;i<matrix.GetLength(0);++i)
For(int j=0;j<matrix.GetLength(1);++j)
Matrix[I,j]=(i+1)*(j+1);

当然,不同的编程语言可能有其独特的处理方式,具体细节可以查阅相关的编程语言参考。

另一和多维数组的形式是交错形(jagged)数组,或者Java风格的数组。交错形数组实际是一个“数组的数组”,它的元素很少存储在连续的块中,如图5.16所示,交错形数组每一行可以有不同的容量,因此,我们使用术语交错形(jagged)。示例5.13是一个简单的交错形数组程序。这里需要注意用于索引每一维的语法,以及Length属性是按预期的方式工作的,其原因是“根”数组实际是一个一维数组,它的元素本身就是引用数组。尽管变错形数组相当灵活,但在性能优化上就比不上矩形数组了,并且.VB.NET对交错形数组的处理也比较麻烦(但并不是不可能)
来源:.net学习网
说明:所有来源为 .net学习网的文章均为原创,如有转载,请在转载处标注本页地址,谢谢!
【编辑:Wyf】

打赏

取消

感谢您的支持,我会做的更好!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

最新评论

共有评论0条
  • 暂无任何评论,请留下您对本文章的看法,共同参入讨论!
发表评论:
留言人:
内  容:
请输入问题 42+16=? 的结果(结果是:58)
结  果: