C#入门系列 -- 一维数组
一维数组定义
几个C#中与数组相关的重要定义:
-
元素:数组的独立数据项被称作元素。数组的所有元素必须是相同类型的,或继承自相同类型;
-
秩/维度:数组可以有任何为正数的维度数。数组的维度就是秩(rank);
-
维度长度:数组的每个维度都有一个长度,就是这个方向的位置个数,称为维度长度;
-
数组长度:数组中所有维度中元素的总和称为数组的长度。
数组类型表示一组数据的集合,使用数组可以方便的定义一个名字(数组名)来表示大批量的数据(数组元素),同时数组支持通过循环结构实现批处理大量的数据。
C#中,数组(Array)是一种包含若干变量的数据结构,这些变量都可以通过计算索引进行访问。
数组中包含的变量,又称数组的元素(Element)具有相同的类型,该类型称为数组的元素类型(Element Type)。
数组类型为引用类型,数组名为实际的数组引用留出空间。
定义格式如下:
数组类型[] 数组名 = new 元素类型[数组长度];
或者分为两步:先定义,使用时初始化
数组类型[] 数组名;
数组名 = new 元素类型[数组长度];
其中,new运算符用来创建数组实例,在内存中为数组申请空间。
一维数组的定义说明:
- 数组名必须符合C#中标识符的命名规则;
- 一维数组是由元素类型、数组名和长度组成的构造类型。元素类型指示存放在数组中元素是什么类型,C#中数组元素的类型可以是值类型或引用类型;
- 数组长度必须大于等于1,表示数组中元素的个数。数组在创建之前,数组长度必须已知,并且数组一旦被创建,其大小就固定了。C#不支持动态数组。
- 数组的索引号从0开始,即如果维度长度为n,索引号范围就是0~n-1。
一维数组初始化
当数组被创建之后,每一个元素被自动初始化为元素类型的默认值。
对于预定义的类型,整型默认值为0,浮点型默认值为0.0,布尔型默认值为false,而引用类型的默认值为null。
C#支持对数组的显式初始化,即在创建数组时包括初始化。
列表来设置显式表达式。一般形式如下:
数组类型[] 数组名 = new 数组类型[数组长度]{与长度相等个数的元素列表};
比如:
int[] arr = new int[3]{1, 2, 3};
当初始化时,初值的个数一定要与数组大小相等,否则会出现编译错误。
比如:下面这样是不允许的
// 错误 ❎ 示例
int[] arr = new int[3]{1, 2};
若需要维度可选的则可以这样写:
数组类型[] 数组名 = new 数组类型[]{元素列表};
int[] arr = new int[]{1, 2, 3, 4};
一维数组使用
数组必须先定义后使用,且只能逐个引用数组元素的值,不能一次性引用整个数组。
数组元素引用是通过下标得到的,一般形式为:
数组名 [下标索引]
比如:
int[] arr = int[3]{1,2,3};
int a = arr[1]; // 索引是1取到的值是2
使用下标索引时需注意:
- 数组元素的下标从0开始,与其内存形式对应。
- 下标表达式可以为常量、常量表达式、变量及变量表达式,但必须为整数,并且不能是负数。
- 元素的下标值不能超过数组的长度,否则会导致数组下标越界的错误。
- 数组不允许以整体形式进行算术运算等,但是C#支持数组的整体赋值。
一维数组遍历
数组遍历:指将数组中挨个访问元素所有元素。
for循环
最简单最常用的for循环实现
int[] arr = new int[] { 1, 2, 3, 4, 5 };
for (int i = 0; i < arr.Length; i++)
{
Console.WriteLine(arr[i]);
}
foreach
foreach语句用于枚举一个集合的元素。
foreach语句的语法
foreach(数据类型 变量 in 数组名)
{
语句
}
- foreach实现:
int[] arr = new int[] { 1, 2, 3, 4, 5 };
foreach (var item in arr)
{
Console.WriteLine(item);
}
foreach使用注意事项:
- foreach中数据类型和变量组成一个临时迭代变量声明。foreach语句使用迭代变量来连续表示数组中的每一个元素;
- 对临时迭代变量的声明,其数据类型可以显式地声明为数组中元素的类型,也可以使用var关键字来隐式提供它的类型,然后由编译器根据数组的类型推断临时迭代变量的类型;
- 迭代变量是只读的,不能被修改。对于值类型的数组不能改变数组的数据;对于引用类型的数组不能改变实际数据的引用,但是实际数据有可能通过迭代变量被修改;
- 使用foreach遍历数组时,不需要设置循环条件,数组遍历更简单快捷,也更安全,尤其对于多维矩形数组的遍历,只需一个foreach语句即可实现。
- 点赞
- 收藏
- 关注作者
评论(0)