数组

From Apache OpenOffice Wiki
Jump to: navigation, search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
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