数组

From Apache OpenOffice Wiki
Jump to: navigation, search
doc OOo
Book.png

除了简单变量(标量)以外,Apache OpenOffice Basic 还支持数组(数据字段)。数据字段包含多个变量,可通过索引对这些变量进行寻址。

简单数组

数组声明与简单变量声明类似。但与变量声明不同的是,数组名称后面是一对括号,其中包含元素数目规范。表达式

Dim MyArray(3)

声明了一个数组,其中包含四个变体数据类型的变量,即 MyArray(0)MyArray(1)MyArray(2)MyArray(3)

也可以在数组中声明特定类型的变量。例如,以下行声明了一个包含四个整型变量的数组:

Dim MyInteger(3) As Integer

在上面的示例中,数组的索引始终以标准起始值零开始。也可以为数据字段声明指定一个包含起始值和最终值的有效性范围。以下示例声明了一个包含六个整型值的数据字段,可以使用索引 5 至 10 对这些值进行寻址:

Dim MyInteger(5 To 10)

索引不必为正值。以下示例也是一个正确的声明,但具有负数据字段限制值:

Dim MyInteger(-10 To -5)

它声明了一个包含 6 个值的整型数据字段,可以使用索引 -10 至 -5 对这些值进行寻址。

在定义数据字段索引时,必须遵循以下三个限制:

  • 可能的最小索引为 -32768。
  • 可能的最大索引为 32767。
  • 最大元素数目(在数据字段维中)为 16368。
Documentation note.png 其他限制值有时适用于 VBA 中的数据字段索引。同样也适用于每个维中的最大元素数目。相关 VBA 文档中提供了对应的有效值。

起始索引的指定值

数据字段的起始索引通常以值 0 开始。也可以使用以下调用将所有数据字段声明的起始索引更改为值 1:

Option Base 1

如果要将此调用应用于模块中的所有数组声明,则必须将其包含在模块标头中。不过,此调用不影响通过 Apache OpenOffice API 定义的 UNO 序列,其索引始终以 0 开始。要使程序更清晰,应避免使用 Option Base 1。

如果使用 Option Base 1,数组中的元素数目不会受到影响,只有起始索引会发生变化。声明

Option Base 1
' ...
Dim MyInteger(3)

创建了 4 个整型变量,可以使用表达式 MyInteger(1)MyInteger(2)MyInteger(3)MyInteger(4) 来描述这些变量。

Documentation note.png 与 VBA 不同,在 Apache OpenOffice Basic 中,表达式 Option Base 1 不影响数组中的元素数目。它只是使 Apache OpenOffice Basic 中的起始索引发生变化。在 VBA 中,声明 MyInteger(3) 会创建索引为 1 至 3 的三个整型值;而在 Apache OpenOffice Basic 中,该声明会创建索引为 1 至 4 的四个整型值。通过使用 Option Compatible,Apache OpenOffice Basic 可以像 VBA 一样运行。

多维数据字段

除了单维数据字段之外,Apache OpenOffice Basic 还支持使用多维数据字段。相应的维之间用逗号分隔。示例

Dim MyIntArray(5, 5)

定义了一个二维整型数组,每一维具有 6 个索引(可通过索引 0 至 5 进行寻址)。整个数组总共可记录 6 x 6 = 36 个整型值。

虽然可以在 Apache OpenOffice Basic 数组中定义数百个维,但可用内存量限制了可以拥有的维数。

数据字段维的动态变更

上面的示例基于已指定维的数据字段。也可以定义数据字段维动态变更的数组。例如,可以定义一个数组,以包含文本中所有以字母 A 开头的单词。由于最初不知道这些单词的数目,因此,需要以后能够更改字段限制值。为此,请在 Apache OpenOffice Basic 中使用以下调用:

ReDim MyArray(10)
Documentation note.png 与 VBA 中只能使用 Dim MyArray() 定义动态数组维不同,在 Apache OpenOffice Basic 中,您可以使用 ReDim 更改静态和动态数组。

以下示例更改了初始数组维,以便可以记录 11 或 21 个值:

Dim MyArray(4) As Integer ' Declaration with five elements 
' ...
ReDim MyArray(10) As Integer ' Increase to 11 elements
' ... 
ReDim MyArray(20) As Integer ' Increase to 21 elements

在重置数组维时,可以使用前面几节中简要介绍的任意选项。其中包括声明多维数据字段和指定显式起始值和最终值。更改数据字段维后,所有内容都将丢失。如果要保留原始值,请使用 Preserve 命令:

Dim MyArray(10) As Integer ' Defining the initial 
' dimensions
' ... 
ReDim Preserve MyArray(20) As Integer ' Increase in 
' data field, while
' retaining content

在使用 Preserve 时,请确保维数和变量类型保持不变。

Documentation note.png 在 VBA 中,只能通过 Preserve 更改数据字段最后一维的上限;而 Apache OpenOffice Basic 还允许您更改其他维。

如果将 ReDimPreserve 一起使用,则必须使用原始数据字段声明中指定的同一数据类型。

Content on this page is licensed under the Public Documentation License (PDL).
Personal tools