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. */