3.7C#引用类型之数组(Array)

数组(Array)是一种数据结构,可以用一个统一的数组名和不同的下标(或称索引,index)来确定数组中唯一的元素。根据数组的维度,可以将其分为一维数组、多维数组和交错数组。

  • 数组中的元素是有序的,包含 Length 个元素的数组从 0 索引到 Length-1
  • 数组中的元素必须属于同一个类型,而且可以随时替换元素。
  • 数组中的元素允许重复的值。
  • 数组的维度数量和每个维度的长度(元素的个数)不可以动态改变,不可以向数组添加、删除元素。

1.一维数组

//声明类型为int,长度为3的数组。
int[] a = new int[3];
//声明类型为int,长度为3的数组,并使用数组初始值设定项初始化。
int[] a = new int[3] { 1, 2, 3 };
//只使用数组初始值设定项并省略new int[3]声明并初始化数组,类型和长度由初始化推断确定。
int[] a = { 2, 3, 5, 7, 11, 13 }; 

如果在不初始化的情况下声明一维数组变量,则必须使用 new 运算符将数组赋予变量。 

int[] array3;
//正确
array3 = new int[5] { 1, 3, 5, 7, 9 };
//错误
array3 = {1, 3, 5, 7, 9};

2.多维数组

多维数组是元素类型是一维数组的数组。

多维数组的维度 是 1 与 方括号内的逗号数量相加的结果。

//二维数组
int[,] a2 = new int[2, 3];
//等同于
int[,] a2 = new int[2, 3] { { 1, 2, 3 }, { 4, 5, 6 } };
//等同于
int[,] a2 = { { 1, 2, 3 }, { 4, 5, 6 } };
//三维数组
int[,,] a3 = new int[2, 3, 2];
//等同于
int[,,] a3 = new int[2, 3, 2] { { {1, 2}, {3, 4}, {5, 6} }, { {7, 8}, {9, 10}, {11, 12} } };
//等同于
int[,,] a3 = { { {1, 2}, {3, 4}, {5, 6} }, { {7, 8}, {9, 10}, {11, 12} } };

如果在不初始化的情况下声明多维数组变量,则必须使用 new 运算符将数组赋予变量。 

int[,] array5;
//正确
array5 = new int[4,2] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } };
//错误
array5 = {{1,2}, {3,4}, {5,6}, {7,8}};

3.交错数组

与多维数组的相同点是数组的元素类型都可以是数组,不同点是多维数组的作为元素的数组的长度都是一样的,而交错数组的作为元素的数组的长度不必全都一样。

第一行创建包含三个元素的数组,每个元素都是 int[] 类型,并且初始值均为 null。第一个元素是由 10 个整数组成的数组,第二个是由 5 个整数组成的数组,而第三个是由 20 个整数组成的数组。

//交错数组
int[][] a = new int[3][];
a[0] = new int[2];
a[1] = new int[3];
a[2] = new int[5];
//等同于
//注意:与多维数组不同的是,元素类型不支持{}短语法
int[][] a = new int[3][] { new int[2], new int[3], new int[5], { 1, 2, 3 } };
//等同于
int[][] a = { new int[2], new int[3], new int[5] };

如果在不初始化的情况下声明交错数组变量,则必须使用 new 运算符将数组赋予变量。 

int[][] a = new int[3][];
//正确
a = new int[3][] { new int[2], new int[3], new int[5] };
//错误
a = { new int[2], new int[3], new int[5] };

4.访问数组元素

//查询
//一维数组
b = a[i];
//二维数组
b = a[i, i];
//三维数组
b = a[i, i, i];

//赋值
//一维数组
a[i] = value;
//二维数组
a[i, i] = value;
//三维数组
a[i, i, i] = value;

5.获取数组长度

a.Length

原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/csharp/csharplang/7874.html

(0)
上一篇 2021年3月6日 01:45
下一篇 2021年3月8日 05:37

相关推荐

  • 3.5C#引用类型之接口(Interface)

    1.接口声明 接口包含一组非抽象class或struct必须实现的相关功能的定义。 2.继承 接口 可以继承自多个基接口。 3.实现 3.1实现 类 或 结构 可以实现多个接口,实现接口的类或结构必须实现其所有未提供默认实现的成员并匹配接口中的成员签名,非必须重写实现具有默认实现的成员。 3.2默认实现 接口…

    C#语言教程 2021年3月5日
    05580
  • 2.8C#函数成员之运算符(Operator)

    运算符声明 所有运算符都必须声明为 public 和 static。 隐式和显式运算符 implicit 或 explicit 关键字分别用于定义隐式转换或显式转换,定义转换的类型必须是该转换的源类型或目标类型,可用两种类型中的任何一种类型来定义两种用户定义类…

    C#语言教程 2021年2月8日
    01720
  • 3.9C#引用类型之特性(Attribute)

    1.特性声明 所有特性类都直接或间接派生自 System.Attribute 基类。 以下示例声明了 HelpAttribute 特性。 2.调用特性 调用特性时,通过用方括号 ([]) 将特性名称以及实参括起来,并置于应用该特性的实体的声明上方。可以将多个特性附加到实体的声明上。对于给定实体,一些…

    C#语言教程 2021年3月9日
    02060

发表回复

登录后才能评论