在C#中,数组实际上是对象,而不只是像C和C++中那样的可寻址连续内存区域
数组常用属性
Array.Rank 维数
Array.Length 所有维度总个数
Array.GetLength(int dimension)指定维度元素个数
Array.GetLowerBound(int dimension)指定维度的下限
Array.GetUpperBound(int dimension)指定维度的上限
数组的使用通常为四个步骤:
1、声明一个数组变量。
2、为这个变量赋值(值为对应的数组对象,可以是新建一个数组对象,也可以是已有的对象。)
3、为这个变量所引用的数组对象赋值。
4、使用数组对象中的值。
eg:
int[] arr; //步骤1
arr = new int[10]; //步骤2,(其实新建的数组对象已有初始值,但通常不是我们想要的值,所以要通过步骤3赋予我们想要的值。)
for(int i=0; i<10; i++) //步骤3
arr[i] = i;
foreach (int v in arr) //步骤4
Console.Write(v);
可以将某些步骤合在一个,这样可以省略一些代码。
将1;2合在一起:
int[] arr = new int[10];
for(int i=0; i<10; i++)
arr[i] = i;
将2;3合在一起:
int[] arr;
arr = new int[10]{1,2,3,4,5,6,7,8,9,10};
注:初使化列表以逗号(,)隔开,且列表中的个数必须与数组长度一致。
这种情况下可以不设置数组的初始化大小,由数组元素确定。
int[] arr;
arr = new int[]{1,2,3,4,5,6,7,8,9,10};
将1;2;3合在一起:
int[] arr = new int[3]{1,2,3};
or
int[] arr = new int[]{1,2,3};
这种情况下可以简写成:
int[] arr = {1,2,3};
多维数组
int[,] arr = { { 1, 2 }, { 3, 4 } }; //这里的逗号个数等于维数减一; 没个维的大小要一样; 不允许C++那样通过arr[2]访问arr[1,0]的元素;
int[,] arrr1 = new int[2,2] { { 1, 2 }, { 3, 4 } };//这里的大小可以省略,但不可只省略其中的一半。不可int[,] arrr1 = new int[2,] { { 1, 2 }, { 3, 4 } }或int[,] arrr1 = new int[,2] { { 1, 2 }, { 3, 4 } }
交错数组
//交错数组是数组的数组,因此其元素是引用类型,并初始化为null。
int[][] jaggeArr1 = new int[3][];
jaggeArr1[0] = new int[2]{1,2};
jaggeArr1[1] = new int[3]{3,4,5};
jaggeArr1[2] = new int[4]{3,4,5,6};
int nRank = jaggeArr1.Rank; //一维的,声明多维的交错数组:int[,][] jaggeArr;
int nUpperBound = jaggeArr1.GetUpperBound(0); //因为我们声明的是一维的,有三个数组元素的数组,所以这里的nUpperBound等于2;
int[,][] jaggeArr2 = new int[2, 2][]; //声明了一个二维的,每维有两个数组元素的数组。
int nRank = jaggeArr2.Rank; //2
int nUpperBound = jaggeArr2.GetUpperBound(0); //1
int[][,] jaggearr = new int[2][,]; //声明一个一维的,有两个多维数组元素的数组。
//不能从元素初始化中省略new运算符,因为不存在元素的默认初始化。
int[][] jaggeArr3 = new int[][]
{
new int[]{1,2},
new int[]{2,3,4}
};
int c = jaggeArr3.Length;//2;两个数组元素。