带你了解二维数组的写法

在讲解二维数组之前,先来了解一下我们常见的数组(一维数组),看看下面这张图。

带你了解二维数组的写法

假设这是一个有4个格子的盒子,每一个格子放置一个圆球,如果我说把第二个格子里面的球拿出来,你是不是很容易就把标号为2的球拿出来。

把这个例子对应到数组中,整个盒子就是一个数组,每个格子的序号就是数组下标,取出来的小球就是数组存放的内容。

下面我们依然用这个例子,把二维数组说一下:

带你了解二维数组的写法

还是那个盒子,这次每一个盒子里面我都放有1号-4号的小球。这时如果我说从第二个格子里面拿一个球出来,你是不是不知道要拿哪一个球,可能就是随便从4个球中拿一个了。那如果我说你把第二个格子当中的4号球帮我拿出来,你是不是就很容易拿出来了。

那么二维数组其实就是在一维数组的元素中再放入数组。同理多维数组就是继续在数组里面放入数组。

(一)我们来说一下写法。

一维数组是这样写的:
Dim arr=array(1,2,3,4)

按照刚刚说的二维数组是在“数组里面放数组”的原理,二维数组我们可以这样写:

Dim arr=array(array(1,2,3,4),array(1,2,3,4,array(1,2,3,4,array(1,2,3,4)

(二)我们要知道怎么读取数组:

一维数组是数组名(数组下标),数组下标是从0开始的,也就是第一个内容的数组下标是0,第二个内容是1,以此类推。。

arr(0)

二维数组是数组名(第一层数组下标,第二层数组下标)

arr(0,0)

这里有两个0,第一个0代表二维数组里面的第一个内容array(1,2,3,4),第二个0代表在上一个0所对应的数组里面的第一个内容,也就是1。

为了区分数组内容,我们把每一个内容加上一个编号。

带你了解二维数组的写法

Dim arr=array(array(11,12,13,14),array(21,22,23,24),array(31,32,33,34),array(41,42,43,44))
TracePrint arr(0,0)

带你了解二维数组的写法
这个代码我是获取的第一个“格子”的第一个球。

当然二维数组也不是说必须要在一维数组的基础上每一个内容都要变成数组,也可以只变化一个或者多个。

带你了解二维数组的写法
比如像图片这样,也是可以的,那读取的时候,第一个格子按照二维数组读取,后面三个格子,按照一维数组去读取。

带你了解二维数组的写法

上面是单一的读取,如果是把数组中所有数据都读取出来呢。

还是先拿一维数组举例:

第一种方法:

Dim arr=array(1,2,3,4)
For i = 0 To UBOUND(arr)
TracePrint arr(i)
Next

带你了解二维数组的写法

第二种方法:

Dim arr=array(1,2,3,4)
For Each k In arr
TracePrint k
Next

带你了解二维数组的写法

那么二维数组的写法,就是在循环里面嵌套循环。

方法1:

Dim arr=array(array(11,12,13,14),array(21,22,23,24),array(31,32,33,34),array(41,42,43,44))
For i = 0 To UBOUND(arr)
For j = 0 To UBOUND(arr(i))
TracePrint arr(i,j)
Next
Next

带你了解二维数组的写法

方法2:

Dim arr=array(array(11,12,13,14),array(21,22,23,24),array(31,32,33,34),array(41,42,43,44))
For Each k In arr
For Each v In k
TracePrint v
Next
Next

带你了解二维数组的写法

现在有一个问题就是如果是一维数组和二维数组的混合体呢

Dim arr=array(array(11,12,13,14),2,3,4)

这种情况,其实用上面的两个方法都是遍历不了的,会有报错。

带你了解二维数组的写法

我们如果想要遍历数组的内容,就要先判断是不是数组。考虑到我们数组内容都是数字,对于数值类型,不支持ubound命令,所以加上cstr转成字符串类型。这样当对遍历出来的内容进行ubound命令,如果得到的数值是0,就是字符串,如果大于0就是数组。

Dim arr=array(array(11,12,13,14),2,3,4)
For Each k In arr
If UBOUND(CStr(k)) > 0 Then
For Each v In k
TracePrint v
Next
Else
TracePrint k
End If
Next

带你了解二维数组的写法

下面我们说第二个知识点——数组与表

在按键中数组和表是通用的。

比如 Dim arr=array(1,2,3,4)和Dim arr={1,2,3,4}

表的表达式是大括号。

这两种写法是一样的,它们都可以用traceprint arr(数组下标)的方式读取出来。

对于表的读取,还可以用方括号。

Dim arr={1,2,3,4}
TracePrint arr[1]

带你了解二维数组的写法

可以看到数组第一个内容对应的是[1],而不是[0],这一点需要特别注意,就是表的键值第一个编号是1。区别数组下标的0。

了解了一维数组的写法,那么二维数组也可以改一下了。

Dim arr={{11,12,13,14},{21,22,23,24},{31,32,33,34},{41,42,43,44}}
TracePrint arr[1][3]

带你了解二维数组的写法

在读取的时候,二维数组用了两个方括号,这里一定不能写错。

不能写成TracePrint arr[1,3],这是一种错误写法。同理数组读取也不能写成traceprint arr(1)(3),这也是一种错误写法。

这里说明一下,数组和表的写法是支持混合使用的,也就说你可以定义的数组,然后用表的提取方法,也可以定义的是表,用数组的方式提取,甚至是定义的时候,一半是数组,一半是表,也可以。

第三个知识点:数组的追加和修改。

比如一个数组原来有4个数字,现在我想加一个,可以这么写。

Dim arr=array(1,2,3,4)
arr(4) = 5
For i = 0 To UBOUND(arr)
TracePrint arr(i)
Next

带你了解二维数组的写法

这个追加内容就是在原有数组最大下标+1,然后给这个下标的数组赋值。

上面arr(4)=5,原来数组中内容有4个,最大下标是3,注意是从0开始的,那么最大下标加1就是4,也就是arr(4),然后让它等于5,就是把5写入到数组里面。

这种方法就是把追加的内容加上数组最后面。如果你想要在中间插入数组内容,那么就需要把所有内容按顺序读取出来。然后加上内容,在按顺序一个个写入进去。

还有一种情况,就是当你不知道原来数组有多少个内容,这个时候你没法直接写出准确数组下标,那就先获取一下数组最大下标。

Dim arr=array(1,2,3,4)
arr(ubound(arr)+1) = 5
For i = 0 To UBOUND(arr)
TracePrint arr(i)
Next

再来说一下修改数组内容,和追加一样,就是给数组赋值。

比如我要修改Dim arr=array(1,2,3,4)第三个内容:

Dim arr=array(1,2,3,4)
arr(2) = 5
For i = 0 To UBOUND(arr)
TracePrint arr(i)
Next

带你了解二维数组的写法

上面说的是一维数组的追加和修改数组内容,在来说说二维:

Dim arr={{11,12,13,14},{21,22,23,24},{31,32,33,34},{41,42,43,44}}
arr(0, 0) = 5
For Each k In arr
For Each v In k
TracePrint v
Next
Next

带你了解二维数组的写法

需要注意一点:如果是一维数组和二维数组的混合,一维数组部分不能通过追加变成二维数组。它们都是各自按照各自的修改和追加的方法。

原文始发于微信公众号(3分钟学堂):

除特别注明外,本站文章均为原创,转载请注明出处和链接!
本文链接地址: https://pumpkinit.com/1166.html
Pumpkin  [https://pumpkinit.com]  感谢

发表评论

电子邮件地址不会被公开。 必填项已用*标注