C# 7.0 核心技术指南 (34):C#语言基础 2.7.2

阅读数:9 2019 年 11 月 30 日 23:44

C# 7.0核心技术指南(34):C#语言基础 2.7.2

(多维数组)

内容简介
本书前三章将集中介绍 C#语言。首先介绍基本的语法、类型和变量。而后会介绍一些高级的特性,如不安全代码以及预处理指令。如果你是 C#语言的初学者,请循序渐进地阅读这些章节。
其余各章则涵盖了.NET Framework 的核心功能,包括 LINQ、XML、集合、并发、I/O 和网络、内存管理、反射、动态编程、特性、安全、应用程序域和原生互操作性等主题。第 6 章和第 7 章是后续主题的基础,除这两章之外,其余各章可以按照需要以任何顺序阅读。LINQ 相关的三个章节好按顺序阅读。其中的一些章节需要一些并发相关的知识,这些知识将在第 14 章中介绍。

多维数组分为两种类型:矩形数组和锯齿形数组。矩形数组代表 n 维的内存块,而锯齿形数组则是数组的数组。

2.7.2.1 矩形数组

矩形数组声明时用逗号分隔每个维度。下面的语句声明了一个矩形二维数组,它的维度是 3×3:

复制代码
int[,] matrix = new int[3,3];

数组的 GetLength 方法返回给定维度的长度(从 0 开始):

复制代码
for (int i = 0; i < matrix.GetLength(0); i++)
for (int j = 0; j < matrix.GetLength(1); j++)
matrix[i,j] = i * 3 + j;

矩形数组可以按照如下方式进行初始化(以下示例创建了一个和上例一样的数组):

复制代码
int[,] matrix = new int[,]
{
{0,1,2},
{3,4,5},
{6,7,8}
};

2.7.2.2 锯齿形数组

锯齿形数组在声明时用一对方括号对表示每个维度。以下例子声明了一个最外层维度是 3 的二维锯齿形数组:

复制代码
int[][] matrix = new int[3][];

有意思的是,这里是 new int[3][] 而非 new int[][3]。Eric Lippert 有一篇文章详细解释了这个问题,请参见: http://albahari.com/jagged

不同于矩形数组,锯齿形数组内层维度在声明时并未指定。每个内层数组都可以是任意长度。每一个内层数组都隐式初始化为 null 而不是一个空数组,因此都需要手动创建:

复制代码
for (int i = 0; i < matrix.Length; i++)
{
matrix[i] = new int[3]; // Create inner array
for (int j = 0; j < matrix[i].Length; j++)
matrix[i][j] = i * 3 + j;
}

锯齿形数组可以按照如下方式进行初始化(以下例子创建了一个和前面例子类似的数组,但是在最后额外追加了一个元素):

复制代码
int[][] matrix = new int[][]
{
new int[] {0,1,2},
new int[] {3,4,5},
new int[] {6,7,8,9}
};

C# 7.0核心技术指南(34):C#语言基础 2.7.2

购书地址 https://item.jd.com/12681788.html?dist=jd

评论

发布