首页 > 解决方案 > 硬编码一个简单的 4X3 数组

问题描述

我看到这个问题很好地展示了如何对一维数组进行硬编码。但是,我正在尝试对 2D 数组进行硬编码,但我的各种尝试都失败了。

这是我迄今为止尝试过的

Points = Array(Array(2, 1, -2), Array(8, -7, 8), Array(-1, -10, 5), Array(5, -3, 3))
Points = Array(2, 1, -2 ; 8, -7, 8 ; -1, -10, 5 ; 5, -3, 3)
Points = Array(2, 1, -2 : 8, -7, 8 : -1, -10, 5 : 5, -3, 3)
Points = Array((2, 1, -2), (8, -7, 8), (-1, -10, 5), (5, -3, 3))

有没有办法做到这一点,还是我必须单独分配每个条目?

即我试图避免以下情况

 Points(1,1) = 2
 Points(1,2) = 1
 Points(1,3) = -2

 Points(2,1) = 8
 Points(2,2) = -7
 Points(2,3) = 8

 Points(3,1) = -1
 Points(3,2) = -10
 Points(3,3) = 5

 Points(4,1) = 5
 Points(4,2) = -3
 Points(4,3) = 3

标签: excelvba

解决方案


VBA 不支持在创建时使用默认值 0/nothing 以外的值初始化数组。

创建小数组的最简单方法是使用 Array 方法。

例如对于一维数组

Dim myArray as Variant
myArray = array(1,2,3,4,5)

多维数组可以通过嵌套 Array 语句来实现。

Dim myArrayUniform as Variant
myArrayUniform = Array(Array(2, 1, -2), Array(8, -7, 8), Array(-1, -10, 5), Array(5, -3, 3))

通过嵌套数组语句创建数组时,您会得到一个数组数组,也称为锯齿数组。锯齿状数组与普通多维数组的不同之处在于它们用于访问单个项目的命名法略有不同。值得注意的是,下面的声明对于锯齿状数组是完全合法的

Dim myArrayUneven as Variant
myArrayUneven = Array(Array(2,  -2), Array(8), Array(-1, -10, 5), Array( 3))

对于每个级别的 Array 语句,使用一组括号来访问交错数组的各个项目。

myArray(x)
MyArrayUniform(x)(y)  ' NOT myArrayUniform(x,y)
etc.

为什么使用这个命名法?myArrayUniform 被声明为一维数组,其中的每一项本身就是一个数组。因此,要访问任何单个项目,我们首先选择初始一维数组中的项目,例如 myArrayUniform(x)。这将返回一个数组,然后我们为其选择我们希望的项目,例如(y)。因此 myArray(x)(y)。

另一个应该注意的“特性”是声明为 Variant 的变量可以包含一个数组。因此,如果变量声明为 Variant,则使用 Array 语句声明的数组的变量声明不需要括号。


推荐阅读