跳转到内容

Rexx 编程/Rexx 指南/数组

来自维基教科书,开放的书籍,开放的世界

rexx 脚本语言支持关联容器。

什么是数组?

[编辑 | 编辑源代码]

数组是一个包含多个元素的变量,它提供了一种方便的方式,可以将大量值分组在单个变量名下。数组有点像带有多个存储位置的鸽子洞隔间。在 Rexx 中编写数组的一种方法是使用所谓的“茎变量”,这些变量使用句点。

/* Let's use a stem variable to store three color names. */
color.1 = "red"
color.2 = "green"
color.3 = "blue"

在上面的代码中,“color”是数组的名称;但是,有三个颜色名称,因此每个颜色名称都与一个数字一起存储。该数字被称为索引。例如,第二个颜色名称(即“green”)在“color.2”茎变量中使用索引 2 存储。如果我们想存储第四个颜色名称,我们只需给它一个第四个索引,例如数字 4。

color.4 = "magenta"

每次使用以前从未使用过的新的索引在数组中存储值时,Rexx 会自动为数组分配更多计算机内存,以确保数组足够大。我们可以轻松添加第五种颜色、第六种颜色、第七种颜色等等。这与其他一些语言不同,这些语言要求您事先说明数组有多大。

数组可以保存多个标量值

[编辑 | 编辑源代码]

数组包含称为元素的一组标量值。保存数组的变量称为数组变量,它可以保存任意数量的元素,并且可以是稀疏的或空的。

/* This first array has two elements. */
size.1 = "small"
size.2 = "large"
 
/* The next array has four elements, but the count starts at zero. */
flavor.0 = "vanilla"
flavor.1 = "chocolate"
flavor.2 = "strawberry"
flavor.3 = "banana"

/* We can make an array larger later by just assigning more values. */
flavor.4 = "blueberry"
flavor.5 = "matcha"
size.3 = "supersize"

使用循环填充数组相当普遍,尤其是在用户需要一次输入或查看大量数据时。

/* The user can enter as many names as will fit in memory. */
say "How many names do you want to enter?"
pull quantity
do count = 1 to quantity
 say "Enter a new name please:"
 pull name.count
end

say "Here are all the names you entered:"
do count = 1 to quantity
 say name.count
end

if quantity > 0 then do
 say "The first name you entered was:" name.1
 say "The last name you entered was:" name.quantity
end

数组可以是多维的

[编辑 | 编辑源代码]

在 rexx 中,可以使用多维数组。这意味着我们需要不止一个索引才能在数组中精确定位一个值。将多维数组视为由其他数组组成的数组的一种方法。多维数组不是按顺序排列的值列表,而是列表的列表。

/* One-dimensional array */
a.1 = "first string"
a.2 = "second string"
a.3 = "third string"

/* Two-dimensional array */
b.1.1 = "first item of first list"
b.1.2 = "second item of first list"
b.2.1 = "first item of second list"
b.2.2 = "second item of second list"

/* Three dimensional array */
c.1.1.1 = "Maybe this represents the first room on the first floor of building 1?"

二维数组通常用于在内存中存储值表。例如,以下是一个使用二维数组创建乘法表的脚本

/* Arrange some products in rows and columns. */
do row = 0 to 12
 do column = 0 to 12
  table.row.column = column * row
 end
end

/* Let's look up a value in the table. */
say "3 times 7 equals" table.3.7

另请参见使用 3 维数组“A”的示例

  I     = 1           
  J     = 1           
  K     = 1           
  N     = 1           
                      
  DO WHILE I < 6      
    DO WHILE J < 6    
      DO WHILE K < 6  
         A.I.J.K = N  
         K = K + 1    
         N = N + 1    
      END             
      K = 1           
      J = J + 1       
    END               
    J = 1             
    I = I + 1         
  END                 

举例说明一个元素

  I=5                 
  J=4                 
  K=2                 
  SAY  A.3.4.1  /* pount out one array must have the value 66 in this example */

数组可以是稀疏的

[编辑 | 编辑源代码]

在 rexx 中,数组可以是稀疏的。这意味着并非每个数组位置都必须具有值或被初始化。数组中可以有空槽或位置,这些位置不包含数据元素。

/* Judith lives in room 1, and Michael lives in room 2 */
resident.1 = "Judith"
resident.2 = "Michael"

/* Carlos lives in room 5. */
resident.5 = "Carlos"

/* So far rooms 3 and 4 are empty. This is a sparse array. */
华夏公益教科书