列表类型
类型为列表的变量会收集一组整型值。 列表类型是一种抽象的数据类型并且您不能将列表变量直接与标准 C 语言的一元运算符或二目运算符一起使用。
您可以使用列表类型的以下操作:
- 如果之前未定义列表变量,那么构造函数 list() 将创建新的列表变量,如果该变量已定义,那么将被清除。
- 可将项添加到列表或将两个列表合并在一起的并置函数 append。
- 可将列表分配给其他列表的“=”运算符。
- 一组对列表变量进行运算并返回标量(整型)值的聚集函数,如 sum、avg、min 和 max 等。
虽然您可以使用列表变量来收集任何整数值,但这些值总是另存为 64 位有符号整数。
list() 函数将返回一个新的空的新列表,该列表必须分配给列表类型变量。 如果赋值运算符左侧的列表变量先前已分配给列表,那么将创建新的类型列表的变量。 它可能分配给区分大小写的现有列表变量,目标列表上收集的任何值将被废弃。 此外,变量可以通过如下方式在 Vue 脚本的任何位置进行声明以声明为类型列表:
__list l_opens;
此效果如 @@BEGIN 调查中调用的 list() 函数,且返回值将分配给此列表变量。
以下示例创建名为 l_opens 的新列表变量:
l_opens = list();
list 函数可从任何子句进行调用。 如果在调用 list 函数时指定了现有的列表名称,那么会清除现有列表。
您可以使用 append() 函数将值添加到列表变量。 每次调用 append 函数时都会将新值添加到已保存在列表变量中的值集合。 以下示例显示了列表变量的大小如何随着对 append 函数的每次调用而进行增长:
append(l_opens, n_opens1); /* l_opens = {n_opens1} */
append(l_opens, n_opens2); /* l_opens = {n_opens1, n_opens2} */
append(l_opens, n_opens3); /* l_opens = {n_opens1, n_opens2, n_opens3} */
append(l_opens, n_opens4); /* l_opens = {n_opens1, n_opens2, n_opens3, n_opens4} */
append() 函数的第二个参数也可以是类型列表的变量,该类型列表将所有其值追加在第一个参数指定的目标列表中。 因此 append 可以用来连接两个列表。
在以下示例中,列表 b 的内容将添加到列表 a:
a=list()
b=list()
append(a,b)
您也可以使用 append 来合并两个列表。 第一个参数是目标列表,第二个是源列表的列表。 在以下示例中,列表 b 的内容将添加到列表 a:
a=list()
b=list()
append(a,b)
append() 函数没有返回值。
使用赋值运算符可将列表指定给其他列表。 将破坏目标列表中的原始值。 在以下示例中,l_opens2 列表的内容将丢失(项被除去),而 l_opens 列表中的内容将复制到 l_opens2 列表。
l_opens2 = list();
append(l_opens2, n_opens5);
l_opens2 = l_opens;
/* l_opens and l_opens2 => {n_opens1, n_opens2, n_opens3, n_opens4} */
如以下示例所示,可对列表变量应用聚集函数:
/* below we assume n_opens1=4, n_opens2=6, n_opens3=2 and n_opens4 = 4
* at the time they were added to the l_opens list variable
*/
x = avg(l_opens); /* this will set x to 4 */
y = min(l_opens); /* this will set y to 2 */
z = sum(l_opens); /* this will set z to 16 */
a = count(l_opens) /* this will set a to 4 */
需要记录准确的聚集值时,列表变量很有用。 列表变量会自动更新,而因为它们的效率比常规变量低,所以仅在需要时才使用。