.NET学习笔记(一):Array

  Array 类是支持数组语言实现的基类,它提供了创建、操作、搜索和排序数组的方法,但是只有系统和编译器可以从 Array 类显式派生,用户只能使用由语言提供的数组构造或 CreateInstance 方法创建 Array 类的实例。(MSDN Array

  数组是顺序保存在连续内存空间内的一组元素(这些元素的类型必须与数组定义的类型一致或能隐式转换成数组定义的类型),且长度固定,所以它在随机存取方面的性能很好;如果该数组是已排序的一维数组,则它在随机查询方面的性能也很好(主要使用二分查找,时间复杂度为 O(log N))。

  相信大家对数组并不陌生,在日常开发中已经使用到了它所提供的很多功能,但是我觉得这里有一个问题需要关注:数组的维度。

一维数组与多维数组

  在 .NET 中,创建一维数组和多维数组的方式如下。

  一维数组:

            int[] a1 = new int[3];
            Array a2 = Array.CreateInstance(typeof(int), 3);
            int[] a3 = a2 as int[];

  多维数组:

            int[,] a1 = new int[3, 3];
            Array a2 = Array.CreateInstance(typeof(int), 3, 3);
            int[,] a3 = a2 as int[,];

  虽然 Array 提供了很多功能,但是大部分功能只支持一维数组,对于多维数组,.NET 只提供了很少的一部分功能。下面我们来看一下支持多维数组的功能:

  1、Array.CreateInstance:初始化 Array 类的新实例;

  2、Array.Clear: 将 Array 中的一系列元素设置为零、false 或 null,具体取决于元素类型;

  3、Clone: 创建 Array 的浅表副本;

  4、Array.Copy将一个 Array 的一部分元素复制到另一个 Array 中,并根据需要执行类型强制转换和装箱;

  5、Array.ConstrainedCopy从指定的源索引开始,复制 Array 中的一系列元素,将它们粘贴到另一 Array 中(从指定的目标索引开始)。 保证在复制未成功完成的情况下撤消所有更改;

  6、GetEnumerator返回 Array 的 IEnumerator。该 IEnumerator 会遍历该数组中的所有元素,不管该数组是几维的

  7、GetLength:获取一个 32 位整数,该整数表示 Array 的指定维中的元素数;

  8、GetLongLength:获取一个 64 位整数,该整数表示 Array 的指定维中的元素数;

  9、GetLowerBound:获取 Array 中指定维度的下限;

  10、GetUpperBound:获取 Array 中指定维度的上限;

  11、GetValue:获取当前 Array 中指定元素的值;

  12、Initialize:通过调用值类型的默认构造函数,初始化值类型 Array 的每一个元素;

  13、SetValue:将当前 Array 中指定元素设置为指定值;

  14、属性 Length:获得一个 32 位整数,该整数表示 Array 的所有维数中元素的总数;

  15、属性 LongLength:获得一个 64 位整数,该整数表示 Array 的所有维数中元素的总数;

  16、属性 Rank:获取 Array 的秩(维数)。

  除了上面的十几个方法/属性外,Array 提供的很多功能(如:IndexOf、LastIndexOf、FindIndex、Exists、Resize、Reverse 和 Sort 等)都只支持一维数组。

多维数组与数组的数组

  其实这两个概念并没有太大的关联,只是在 C# 中它们的声明和定义的方式很接近。

1             int[,] a = new int[2, 2];//多维数组
2 int[][] b = new int[2][];//数组的数组

  但是,如果我们使用 Array.CreateInstance 来定义就可以看出它们的本质区别了。

1             // 多维数组
2 Array b = Array.CreateInstance(typeof(int), 2, 2);
3
4 //数组的数组
5 Array a1 = Array.CreateInstance(typeof(Array), 2);
6 a1.SetValue(Array.CreateInstance(typeof(int), 2), 0);
7 a1.SetValue(Array.CreateInstance(typeof(int), 2), 1);

  从上面的代码我们可以看出:数组的数组其实是一种特殊的数组,即数组中的各个元素也是数组。

posted @ 2011-09-15 15:55  Web游离者  阅读(609)  评论(0编辑  收藏  举报