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

数组是一种数据结构。

  • 数组的索引是隐式的整数类型。
  • 数组的索引是有序的,包含 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月7日 01:47
下一篇 2021年3月8日 05:37

相关推荐

  • 2.7C#函数成员之事件(Event)

    1.事件委托声明 .NET 类库中的所有事件均基于 EventHandler 委托、EventHandler<TEventArgs> 委托,一般不建议自定义委托。 第一个参数为object类型,表示能够引发事件的类的实例。 第二个参数为从 EventArgs 基类派生的子类型的…

    C#语言教程 2021年2月7日
    04110
  • 2.8C#函数成员之运算符(Operator)

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

    C#语言教程 2021年2月8日
    02500
  • 3.10C#引用类型之委托(Delegate)

    委托类型派生自 System.Delegate 类。 1.委托声明 委托 表示对具有 特定参数列表 和 返回类型 的方法的引用。 委托 可认为是函数式语言里的“函数类型”,通过委托,可以将方法视为可赋值给变量或作为参数传递的实体。 委托还类似于其它一些语言中存在的“函数指针”概念。 具有相同参数列表和返回类型…

    C#语言教程 2021年3月10日
    06320

发表回复

登录后才能评论