1. 数组
数组实际上是由一个变量名称表示的一组同类型的数据元素。每个元素可以通过变量名和方括号,再加上一个或多个索引访问。
数组名称[index]
定义
元素: 数组的独立数据项。数组中的所有元素都必须是相同类型的,或者继承自相同类型。
秩、维度: 数组的维度可以为任何整数。称做秩 Rank
维度长度: 数组的每一维都由长度,即这个方向的位置个数。
数组长度: 数组的所有维度中的元素总数长度称为数组的长度。
要点:
数组一旦创建,大小就固定了。C# 不支持动态数组。
数组的索引从0开始的。
2.数组的类型
一维数组可以认为是单行元素或元素向量。
多维数组是由主向量中的位置组成的,每一个位置本身又是一个数组,称为子数组。子数组向量中的位置本身是一个子数组。
多维数组:矩阵数组,交错数组
矩形数组: myArray[4, 6, 1]
不管由多少维度,总使用一组方括号
交错数组: JagArray[2][5][3]
可以由不同长度的子数组,为每一个维度使用一对方括号
3. 数组是对象
数组实例从System.Array继承的对象。
Rank 返回数组的维度数的属性
Length 返回数组长度的属性(数组中的所有元素)
数组是引用类型,与所有引用类型一样,有数据的引用以及数据对象本身。数组对象本身总在堆上,引用在栈或堆上。
数组元素可以是值类型也可以是引用类型。(值类型数组,引用类型数组)
4. 一维数组和矩形数组
声明一维数组或矩形数组
类型和变量名称之间使用一对方括号,方括号内的逗号是秩说明符,指定数组的维度。没有逗号就是一维数组。
一维数组
int[] a = new int[] { 1, 3, 5, 7, 9 };
Console.WriteLine(a.Rank);
Console.WriteLine(a.Length);
输出:
1 -- 表示一维数组
5 --表示5个元素
多维数组
int[,] b = new int[2, 3] { { 1, 2, 3 }, { 4, 5, 6 } };
Console.WriteLine(b.Rank);
Console.WriteLine(b.Length);
可以这样理解,一个平面的长方形,宽2 ,长3
输出:
2 --表示二位数组
6 --表示6个元素
矩形数组
int[,,] C = new int[3, 6, 2];
维度长度:3, 6, 2 ,可以这样理解,一个长方体高 3,长6 ,宽2
堆中分配内存区间:
6.访问数组元素
在数组中使用整型值作为索引来访问数组元素。
数组名【int索引值】
7. 初始化数组
对于预定义类型,整数默认值 0, 浮点型默认值 0.0, 布尔型默认值 False, 引用类型的默认值则是 null
一维数组自动初始化
int[4] intArr = new int[4];
显示初始化一维数组
在数组实例化的数组创建表达式之后加上一个初始化列表。
初始化值必须逗号隔开,并封闭在一组大括号内。
不必输入维度长度,编译器可以通过初始化值得个数来推断长度。
int[4] intArr = new int[4] { 1, 2, 3, 4 };
显示初始化矩阵数组
每一个初始化值向量必须封闭在大括号内
每一个维度也必须嵌套并封闭在大括号内
除了初始值,每一个维度得初始化列表和组成部分也必须使用逗号分隔。
int[,] Arr2 = new int[,] { { 10, 1 }, { 3, 6 },{ 9, 5 } };
初始化矩形数组得语法点
矩形数组使用嵌套得,逗号分隔得初始化列表进行初始化。
int[,,] intArry = new int[4, 3, 2]
{
{{1,2},{3,4},{5,6} },
{{7,8},{9,0},{1,2} },
{{3,4},{5,6},{7,8 }},
{{1,2},{3,4},{5,6} },
};
快捷语法:
int[] a1 = new int[3] { 1, 2, 3 }; // 等价
int[] a2 = { 1, 2, 3 };
隐式类型数组
初始化数组是,让编译器根据初值得类型来推断数组类型。
var a3 =new [] { 1, 2, 3 };
8. 交错数组
交错数组是数组的数组。交错数组的子数组的元素个数可以不同。
交错数组语法要求每一个维度都有一对独立的方括号。交错数组维度可以是大于1的任意整数。
9. foreach 语句
允许我们连续访问数组中的每一个元素。
int[] a = new int[] { 1, 3, 5, 7, 9 };
foreach (var item in a)
{
Console.WriteLine(item);
}
迭代变量 item是只读的,不能改变它。
多维数组
int[,] b = new int[2, 3] { { 1, 2, 3 }, { 4, 5, 6 } };
foreach (var item in b)
{
Console.WriteLine(item);
}
输出:
1
2
3
4
5
6
3
10. 数组的协变
在某些情况,即使某个对象不是数组的基类型,也可以把它赋值给数组元素,这种属性叫做数组协变。
数组是引用类型数组,在赋值的对象类型和数组基类类型之间有隐式转换或者显示转换。
11. 数组继承的有用成员
Rank 获取数组的维度数
Length 获取数组中所有维度的元素总和
GetLength 返回数组指定维度的长度
Clear 将某一范围内的元素设置为0或null
Sort 在一维数组中堆元素进行排序
BinarySearch 使用二进制搜索,搜索一维数组中的值
Clone 进行数组的浅复制
Indexof 返回一维数组中遇到的第一个值
Reverse 反转一维数组中的某一范围内的元素
GetUpperBound 获取指定维度的上限