文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>8->>数组

8->>数组

时间:2011-03-31  来源:乱舞春秋

  1>=数组概述:

  int[] myArray=new int[100];//每个元素初始化为0,虽然数组元素是值类型,但是却是分配在托管堆中的;

  myClass[] mytype=new myClass[100];//每个元素初始化为null;

  myArray和mytype变量存储的是指向数组的引用,而非数组本身;

  CLS要求所有数组都是0基数组【最小索引是0,性能最好的数组,微软为它们优化性能方面做了很多工作,例如有些特殊的IL指令:newarr、ldelem、、、】,但是CLS也支持非0基数组。CLR支持交错数组,但是交错数组不兼容CLS【CLS不允许一个数组的元素是System.Array。但是仍然可以在两个都支持交错数组的语言之间传递】。

  2>=System.Array[所有数组的基类]:

  实现了 ICloneable, IList, ICollection, IEnumerable接口,常用成员如下:

成员 类型 描述
Rank 只读实例属性 返回数组维数
GetLength 实例方法 返回指定维数的元素个数
Length 只读实例属性 返回所有元素的个数
Sort 静态方法 排序[元素必须实现了IComparer接口]
BinarySearch 静态方法 用二分搜索法查找元素,该方法假定数组已排序元素必须实现IComparer接口,通常先调用Sort排序在调用此方法
Reverse 静态方法 反转数组元素[整体或者部分]
Clone 实例方法 返回新创建的数组[源数组的一个浅拷贝]
CopyTo 实例方法 将数组中的元素拷贝到另一个数组中
Copy 静态方法 将一个数组的元素拷贝到另一个数组中,并根据需要执行适当的转型
Clear 静态方法 将数组中部分元素设为0或null
CreateInstance 静态方法 创建一个数组实例。它允许我们在运行时定义任何类型、任何维数、任何上下限的数组。一般不常用
GetLowerBound 实例方法 返回指定维数的下限,一般为0.不常用
GetUpperBound 实例方法 返回指定维数的下限,一般为指定维的元素个数减1.不常用
创建非0下限的数组
 1 //每一维数组的下限
2 int[] lowerBound = { 2011, 3 };
3
4 //对应每一维的元素个数
5 int[] lengths = { 10, 7 };
6
7 //第一维索引下限是2011,元素个数是10:第二维索引下限是3,元素个数是7的二维数组
8 int[,] my = (int[,])Array.CreateInstance(typeof(int), lengths, lowerBound);
9
10 Console.WriteLine(my.GetLowerBound(0));//返回第一维的索引下限《2011》
11 Console.WriteLine(my.GetLowerBound(1));//返回第二维的索引下限《3》

  3>=快速数组访问【指针】:

  当我们访问一个数组中的元素时,CLR会确保索引不会超出上下限。否则会抛出System.IndexOutOfRangeException:【索引超出了数组界限】。CLR索引检查会有一些性能方面的代价。如果对自己的代码有足够的信心,并且不介意使用非安全的代码,则可以让CLR不执行检查,代码如下:

unsafe
 1         //使用 /unsafe 开关编译或者在项目》生成》勾选允许不安全的代码
2 unsafe static void Main()
3 {
4 int[] my = { 1,3,5,7,9};
5 //获取指向第0个元素的指针
6 fixed (int* element = &my[0])
7 {
8 //遍历每一个元素
9 for (int i = 0; i < my.Length; i++)
10 {
11 Console.WriteLine(element[i]);
12 }
13 }
14 }
类型安全的版本中用ldelem指令加载值【正是它导致CLR执行索引检查】;非安全版本中使用ldind.4直接从内存中获取4字节的数值,不执行索引检查。
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载