一、简介
数组是一个存储相同类型元素的固定大小的顺序集合。数组是用来存储数据的集合,通常认为数组是一个同一类型变量的集合。数组中某个指定的元素是通过索引来访问的。所有的数组都是由连续的内存位置组成的。最低的地址对应第一个元素,最高的地址对应最后一个元素。
二、数组语法
2.1 声明数组
C#声明数组时,方括号[]必须跟在类型后面,而不是标识符后面。示例:
// datatype数据类型
// []数组的秩(维度)
// arrayName数组变量名
datatype[] arrayName;
2.2 初始化数组
声明一个数组不会在内存中初始化数组。当初始化数组变量时,可以赋值给数组。数组是一个引用类型,所以需要使用 new 关键字来创建数组的实例。
int[] arr1 = new int[5]; // 创建了length为5的数组,数组项都为0
int[] arr2 = new int[5] {1,2,3,4,5}; // 创建了length为5的数组,并初始化数组
int[] arr3 = new int[] {1,2,3,4,5}; // 初始化时也可不写数组长度
2.3 赋值和访问数组
赋值: 可以通过使用索引号赋值给一个单独的数组元素;
访问: 元素是通过带索引的数组名称来访问的。这是通过把元素的索引放置在数组名称后的方括号中来实现的。
int[] arr = new int[2] {1,2};
arr[0] = 2; // 赋值
Console.WriteLine(arr[0]); // 2 访问
arr[2] = 5; // 报错,不能修改数组外的值
Console.WriteLine(arr[2]); // 报错。不能访问数组不存在的值
注意: 可以通过下标访问的方式修改数组中的值,但是无法访问数组下标超限制的值会报错。
三、数组遍历
之前整理的C#循环方式,for、while、forEach等都可以用来遍历数组;这里就不一一举例了,重点展示一下foreach:
int[] arr = new int[] { 1, 2, 3, 4 };
foreach (int element in arr)
{
// element代表这数组每项的值
Console.WriteLine(element);
}
四、数组的属性和方法
4.1 属性
属性 | 描述 |
---|---|
IsFixedSize | 获取一个值,该值指示 Array 是否具有固定大小。 |
IsReadOnly | 获取一个值,该值指示 Array 是否为只读。 |
IsSynchronized | 获取一个值,该值指示是否同步对 Array 的访问(线程安全)。 |
Length | 获取 Array 的所有维度中的元素总数。 |
LongLength | 获取一个 64 位整数,该整数表示 Array 的所有维数中元素的总数。 |
MaxLength | 获取数组中可能包含的最大元素数。 |
Rank | 获取 Array 的秩(维数)。 例如,一维数组返回 1,二维数组返回 2,依次类推。 |
SyncRoot | 获取可用于同步对 Array 的访问的对象。 |
4.2 方法
方法 | 描述 |
---|---|
Clear(Array) | 清除数组的内容。 |
Clone() | 创建 Array 的浅表副本。 |
Copy(Array, Array, Int32) | 从第一个元素开始复制 Array 中的一系列元素,将它们粘贴到另一 Array 中(从第一个元素开始)。 长度指定为 32 位整数。 |
Empty() | 返回一个空数组。 |
[FindIndex(T], Int32, Predicate) | 搜索与指定谓词所定义的条件相匹配的元素,并返回 Array 中从指定索引到最后一个元素的元素范围内第一个匹配项的从零开始的索引。 |
[FindLast(T], Predicate) | 搜索与指定谓词所定义的条件相匹配的元素,并返回整个 Array 中的最后一个匹配元素。 |
[FindLastIndex(T], Predicate) | 搜索与指定谓词所定义的条件相匹配的元素,并返回整个 Array 中最后一个匹配元素的从零开始的索引。 |
GetValue(Int64) | 获取一维 Array 中指定位置的值。 索引指定为 64 位整数。 |
IndexOf(Array, Object) | 在一个一维数组中搜索指定对象,并返回其首个匹配项的索引。 |
MemberwiseClone() | 创建当前 Object 的浅表副本。(继承自 Object) |
[Resize(T], Int32) | 将一维数组的元素数更改为指定的新大小。 |
SetValue(Object, Int32) | 将值设置为一维 Array 中指定位置的元素。 索引指定为 32 位整数。 |
Sort(Array) | 使用 Array 中每个元素的 IComparable 实现,对整个一维 Array 中的元素进行排序。 |
ToString() | 返回表示当前对象的字符串。(继承自 Object) |
五、枚举
C# 枚举是值类型。换句话说,枚举包含自己的值,且不能继承或传递继承。枚举是一组命名整型常量。枚举类型是使用 enum 关键字声明的。
语法:
// enum 枚举关键词 enum_name 枚举变量名
enum <enum_name>
{
enumeration list // 是一个用逗号分隔的标识符列表
};
// 示例:
enum Days { Sun, Mon, tue, Wed, thu, Fri, Sat };
int x = (int)Day.Sun; // x为0
注意:枚举列表中的每个符号代表一个整数值,一个比它前面的符号大的整数值。默认情况下,第一个枚举符号的值是 0.
六、补充了解
概念 | 描述 |
---|---|
多维数组 | C# 支持多维数组。多维数组最简单的形式是二维数组。 |
交错数组 | C# 支持交错数组,即数组的数组。 |
传递数组给函数 | 您可以通过指定不带索引的数组名称来给函数传递一个指向数组的指针。 |
参数数组 | 这通常用于传递未知数量的参数给函数。 |
Array 类 | 在 System 命名空间中定义,是所有数组的基类,并提供了各种用于数组的属性和方法。 |
数组转字符串: string.Join(",", 数组变量);
字符串转数组: 字符串变量.Split(',');