リスト型

リスト型の変数は、整数型の値のセットを収集します。 リスト型は抽象データ型であり、リスト変数を標準 C の単項または 2 項演算子と直接使用することはできません。

リスト型には、次の演算を使用できます。

  • 新規リスト変数を作成するためのコンストラクター関数 list() (定義されていない場合)。この変数が既に定義されている場合は、クリアされます。
  • 項目をリストに追加したり、2 つのリストを結合したりするための連結関数 append
  • リストを別のリストに代入する「=」演算子。
  • リスト変数で機能し、スカラー (整数) 値を戻す集約関数のセット (sumavgminmax など)。

リスト変数を使用して整数値を収集することはできますが、値は常に 64 ビットの符号付き整数として保存されます。

list() 関数は、リスト型の変数に代入される新しい空のリストを戻します。 これにより、代入演算子の左辺のリスト変数が以前にリストに代入されたことがない場合は、新しいリスト型の変数が作成されます。これが既存のリスト変数に代入されることもあります。その場合、ターゲット・リストに収集された値はすべて廃棄されます。また、Vue スクリプトの任意の位置で次のように変数を宣言すると、リスト型の変数を宣言できます。

       __list l_opens;

この結果、list() 関数が @@BEGIN プローブで呼び出されて、戻り値がこのリスト変数に代入されたかのようになります。

次の例では、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() 関数に対する 2 番目のパラメーターには、最初のパラメーターで指定されたターゲット・リストにすべての値を追加するリスト型の変数も指定できます。このため、append を使用して 2 つのリストを結合することもできます。

次の例では、リスト b の内容がリスト a に追加されます。

a=list()
b=list()
append(a,b)
注: リストに追加する値は、整数またはリスト型のパラメーターでなければなりません。変数 n_opens1 -n_opens4 が整数型でない場合は、エラーが発生します。 long long より小さい型 (short や int など) は、long long 型に自動的にプロモートされます。

また、append を使用して 2 つのリストを結合することもできます。 最初の引数がターゲット・リストで、2 番目の引数がソース・リストです。 次の例では、リスト 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 */ 

リスト変数は、正確な集約値を記録する必要がある場合に有用です。 リスト変数は原子的に更新されるため、必要な場合のみ使用してください。この変数は通常の変数よりも効率的ではありません。