C#学习笔记(十七)数组

数组

如果需要使用同一类型的多个对象,对象的数量确定就可以使用数组;对象的数量不确定则可以使用集合。数组是一种数据结构,它可以包含同一类型的多个元素。

1.数组相关定义
元素         数组的独立数据项被称作元素。数组的所有元素必须是相同类型的,或继承自相同的类型。
秩/维度    数组可以有任何为整数的维度数。数组的维度数称作秩(rank)。
维度长度  数组的每一个维度都有长度,就是这个方向的位置个数。
数组长度  数组的所有维度中的元素的总和称为数组的长度。

2.数组的类型
一维数组  一维数组是单行元素或元素向量。 
多维数组  多维数组是由主向量中的位置组成的,每一个位置本身又是一个数组,称为子数组。子数组向量中的位置本身又是一个子数组。
矩形数组  某个维度的所有子数组有相同长度的多维数组。
               不管有多少维度,总是使用一组方括号。
交错数组  每一个子数组都是独立的数组的多维度数组。
               可以有不同长度的子数组。
               为数组的每一个维度使用一对方括号。

3.一维数组和矩形数组
   要声明一维数组或矩形数组,可以在类型和变量名称之间使用一对方括号。
   括号中内的逗号就是秩说明符,它们指定了数组的维度数,秩就是逗号数量加1,可以使用任意多的秩说明符。
   基类和秩说明符构成了数组类型。数组类型中不能放数组长度,维度长度不是数组类型的一部分。
   数组声明后,维度数就是固定。数组初始化以后,数组维度长度才会被确定。

4.初始化数组
   当初始化数组之后,每一个元素都会被初始化类型的默认值。
显式初始化一维数组
   一维数组可以通过数组初始化之后初始化列表来设置显式初始值。

int[] array1 = new int[4];
array1[0] = 1;
array1[1] = 2;
array1[2] = 3;
array1[3] = 4;

//数组初始化器
int[] array2 = new int[4] { 1, 2, 3, 4 };

//数组初始化器 数组大小可以省略
int[] array3 = new int[] { 1, 2, 3, 4 };

//可以省略初始化数组
int[] array4 = { 1, 2, 3, 4 };


   初始值必须以逗号分隔,并封闭在一组大括号内。
   维度长度是可选的,编译器可以通过初始化值的个数确定数组维度长度。
显式初始化矩形数组
   矩形数组的每一个初始值向量必须封闭在大括号内。
   每一个维度也必须嵌套并封闭在大括号内。
   每个维度之间也必须使用逗号分隔。
   int[,] array = new int[,] { { 10, 20, 30, 40 }, { 10, 20, 30, 40 } };
5.交错数组
   交错数组的声明语法要求每一个维度都有一对独立的方括号。数组变量声明中的方括号数决定了数组的秩。数组变量声明中不包括维度长度。
   交错数组可以有任何大于1的维度。
初始化交错数组
   首先初始化顶层数组,然后实例化每个子数组,把新建数组的引用赋值给包含他们的数组的合适元素。
   int[][] array = new int[3][];
   array[0] = new int[] { 10 };
   array[1] = new int[] { 10, 20 };
   array[2] = new int[] { 10, 20, 30 };
6.矩形数组和交错数组的比较
   在CIL中,一维数组有特定的指令用于性能优化。矩形数组没有这些指令,所以有时使用一维数组的交错数组比矩形数组更有效率。
   矩形数组复杂度小,相较交错数组更容易理解,矩形数组被作为一个单元而不是数组的数组。
7.数组协变
   在某些情况下,即使某个对象不是数组的基类型,也可以赋值给数组元素。这种属性叫做数组协变。
   数组是引用类型数组。值类型数组没有协变。
   在赋值的对象类型和数组之间有隐式转换或显式转换。
   由于在派生类和基类之间总有隐式转换,因此可以将派生类的对象赋值给基类声明的数组。

发布了35 篇原创文章 · 获赞 67 · 访问量 8524

猜你喜欢

转载自blog.csdn.net/EngraveSmile/article/details/89234441
今日推荐