欢迎光临散文网 会员登陆 & 注册

第 19 讲:数组(一):一维、二维和高维数组

2021-04-04 08:47 作者:SunnieShine  | 我要投稿

我们将进入一个新的板块:数组(Array)。数组是将一系列数据归并放在一起处理的一种特殊的数据类型。在 C# 里,一共有三种数组:多维数组(Multi-dimensional Array)、锯齿数组(也叫交错数组,Jigsaw Array)和混合数组(Mixed Array)。下面我们挨个介绍一下。

和 C 语言的数组的概念一样,但用法不同,所以我们给大家介绍具体写法格式的时候,希望你能多练习、多理解。

Part 1 一维数组

在 C 语言里,我们使用中括号,追加到变量之后,来表达和区分它和普通的变量不同。在 C# 里,我们这么书写:

C# 里拥有上述三种书写格式。第一种,我们使用 new 语句,在后面书写 int[3] 来表达数组长度是 3;第二种,我们使用 new 语句,在后面初始化数组的每一个元素;第三种是第二种的简写。在初始化的时候,可以不写 new int[] 这个部分。

当然,第二种写法里 new int[] 也可以写出来长度(后面有 6 个元素,因此可以写成 new int[6]。但是这个 6 是跟着后面元素个数的,因此这个 6 可以省略)。

另请注意,C# 把 int 类型的数组变量记作 int[],即写在类型的右侧紧跟一个中括号。

使用数组,我们可以采用中括号来获取数组指定位置上的数值。

这样一来, abcd 四个变量分别是 1、2、4 和 8。中括号里的数值称为下标(也叫索引,Index)。C# 里规定,数组下标从 0 开始,即第一个元素要写成 [0],第二个元素要写成 [1],等等。

可能你会问我,如果我写了一个过大或者过小的索引,比如说 arr[-1] 或者 arr[100],会怎么样呢?答案当然很简单:由于这种行为是非预期的行为,因此结果当然了产生异常了。实际上,运行期间,你就会看到,这样的代码会产生一个所谓的 IndexOutOfRangeException 类型的异常,这刚好代表你传入的索引是无效的:out of range 不就是超出范围的意思嘛。

另外,我们还可以使用 for 循环,对每一个元素进行取值:

比如这样,我们使用 for 循环来对每一个元素进行取值操作,然后输出它们。

另外,在 C# 里,我们如果取出数组总长度,我们使用的是 .Length 语法。我们直接在数组本身后追加 .Length 来取出数组一共多少个元素。这一点和 C 语言不同:C 语言的数组是取长度是用的 sizeof(数组) / sizeof(元素类型)

不过,C# 还允许另外一种循环类型:foreach 循环。在循环的内容里,我们没有讲解这个类型的循环,因为这个循环类型必须使用数组或别的集合才可以使用。它的格式是 foreach (类型 变量名 in 集合)

这种循环类型专门针对于一个数组来用的话,我们就不必使用索引来写那么长了;从 foreach 循环来看,element 就是数组里面的每一个元素。直接取出数值本身,然后 element 就是已经是元素本身了。

目前来说,foreach 对数组可用;但是别的可以用 foreach 循环的东西我们还说不到,所以我们先等到用到的时候再来说。

Part 2 二维数组

和一维数组不一样的是,二维数组是两个维度的数组类型。你可以当成一个矩阵。

我们使用这样的语法,来初始化一个二维数组的每一个元素。当然,new int[3, 4] 是可以不写的;就算要写的话,这里的 3 和 4 也可以不写:new int[,]。注意这种语法格式。类型写的是 int[,],这表示 int 作为元素本体的数组类型,数组是二维数组,因为中括号里用了一个逗号。一个逗号表示将数组分成两个维度。

如果要获取里面的数值,我们依旧使用中括号,不过语法是这样的:

注意语法格式。arr[0, 0] 表示取第 1 行第 1 列的元素,arr[1, 0] 表示取第 2 行第 1 列的元素。和前文一样,0 表示第一个。

另外,通过 for 循环,我们也可以遍历每一个元素:

foreach 循环对多维数组的取值是“展开”式的。不论多少个维度,foreach 就把元素挨个展开排成一排挨个遍历(Traverse)。所谓的遍历,就是取每一个元素的过程。

最后,使用 .Length 得到的结果,可能和你预期结果不一样。.Length 取出来的结果是数组总的元素个数;二维数组虽然有维度的概念,但 .Length 照样取的是所有维度所有元素个数的总和。

Part 3 高维数组

高维数组专门指代三维及其以上的数组类型。我们拿三维数组举例:

三维数组虽然排版不是很好理解,不过你可以认为这是一个有长、有宽、有高的三维矩阵。另外,new int[2, 3, 4] 也可以不写;也可以写成 new int[,,]。两个逗号将中括号分成三部分,暗示是三个维度。

遍历和前文一致,使用 .GetLength 来获取每一个维度的长度,foreach 循环获取每一个元素。

三维数组以及别的高维数组是一样的,.Length 取出来的也是所有维度所有元素的个数总和。


第 19 讲:数组(一):一维、二维和高维数组的评论 (共 条)

分享到微博请遵守国家法律