列表类型

类型为列表的变量会收集一组整型值。 列表类型是一种抽象的数据类型并且您不能将列表变量直接与标准 C 语言的一元运算符或二目运算符一起使用。

您可以使用列表类型的以下操作:

  • 如果之前未定义列表变量,那么构造函数 list() 将创建新的列表变量,如果该变量已定义,那么将被清除。
  • 可将项添加到列表或将两个列表合并在一起的并置函数 append
  • 可将列表分配给其他列表的“=”运算符。
  • 一组对列表变量进行运算并返回标量(整型)值的聚集函数,如 sumavgminmax 等。

虽然您可以使用列表变量来收集任何整数值,但这些值总是另存为 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)
注: 添加到列表的值必须是整数或列表类型的参数,如果任何变量 n_opens1 -n_opens4 没有整数类型,那么这是错误。 任何比 long long 短的类型(如 short 或 int)都会自动提升为 long long 类型。

您也可以使用 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 */ 

需要记录准确的聚集值时,列表变量很有用。 列表变量会自动更新,而因为它们的效率比常规变量低,所以仅在需要时才使用。