C#数组
-
数组是对象
- 属性 Rank:
- 对于矩形数组,返回秩/维度,
- 对于交错数组,返回1
- 属性 Length:
- 对于矩形数组,返回数组总长度(可以使用方法GetLength获取每一维的长度,参数从0开始代表最高维)
- 对于交错数组,返回最高维的维度长度
- 属性 Rank:
-
基本概念
- 元素
- 秩/维度
- 维度长度:这一维的长度
- 数组长度:所有维度的长度之和
-
多维数组
- 矩阵数组
- 每行(以二维数组为例)的长度都一样
- 使用同一组中括号,用逗号(被称为秩说明符)隔开不同维度的长度/索引
- 交错数组
- 数组的每个元素都是独立的数组
- 每行(以二维数组为例)长度可以不同
- 每一维都是用一个方括号
- 矩阵数组
-
一维数组和矩形数组
- 一维数组
- 声明:
int[] a;
- 实例化:
int[] a = new int[10];
- 初始化:
int[] a = new int[] {1, 2, 3};
- 省略new:
int[] a = {1, 2, 3};
- 声明:
- 矩形数组
- 声明:
int[,] b;
- 实例化:
int[,] b = new int[3, 4];
- 初始化:
int[,] b = new int[,] { {1, 2}, {3, 4} };
- 省略new:
int[,] b = { {1, 2}, {3, 4} };
- 声明:
- 一维数组
-
交错数组
- 数组的数组
- 实例化时,只允许指定最高维的长度
int[][] a = new int [3][];
是可以的int[][] a = new int [3][4];
是不允许的
- 初始化时,每一行都要new
- 交错数组的某一维可以是矩形数组
-
比较交错数组和矩形数组
- 交错数组
- 多个数组对象
- 更复杂
- 有对一维数组的优化
- foreach按层遍历
- 矩形数组
- 一个数组对象
- 较简单
- 没有优化
- foreach遍历所有元素
- 在CIL中,一维数组有特点的指令用于性能优化,矩形数组没有这些指令,并且不在相同级别进行优化。
- 因此,有时使用一维数组(可以被优化)的交错数组比矩形数组(不能被优化)更有效率
- 另一方面,矩形数组的编程复杂度要小很多,因此它会被作为一个单元而不是数组的数组
- 交错数组
-
数组协变
- 类似于Java中上转型对象
- 即对于父类引用的数组,每个元素对应的引用实际指向子类
-
数组继承自System.Array类的属性方法
- 属性
- Rank: 实例属性,获取总维度数
- Length:实例属性,获取数组中所有维度的元素总和
- 方法
- GetLength:实例方法,返回指定维度长度
- Clear:静态方法,将某一范围内的元素值设置为0或null
- Sort:静态方法,在一维数组中对数组进行排序
- BinarySearch:静态方法,使用二分搜索一维数组中的值
- Clone:实例方法,进行数组的浅复制
- IndexOf:静态方法,返回一维数组中遇到的第一个值
- Reverse:静态方法,反转数组某一范围的元素
- GetUpperBound:实例方法,获取指定维度的上界(不同于C++中的STL)
- 属性