配列またはコレクションをトラバースします。
For &Var in expression
code
Endfor
入力値の説明:
&
Var
expression のアイテムと同じデータタイプの変数を指定します。
expression
値がコレクション、配列、または行列であるエクスプレッションです。
code
反復処理で毎回実行する GeneXus コードです。
エクスプレッションが配列の変数であるとします:
for &var in &varArray()
… // コード
endfor
これ以前のコードでは、&var 変数内に配列の各値である &varArray を格納しています。1 次元のベクトルの場合、コードは次のように展開します:
&x = 1
Do while &x <= rows(&varArray())
&var = &varArray(&x)
... // コード
&x += 1
EndDo
expression は、2 次元 (行列) の変数の配列である場合もあります:
for &var in &varMatrix()
... // コード
endfor
展開したコードは次のとおりです:
&x = 1
Do while &x <= rows(&varMatrix())
&y = 1
Do while &y <= cols(&varMatrix())
&var = &varMatrix( &x, &y)
... // コード
&y += 1
EndDo
&x += 1
EndDo
すべてのタイプ ( [ Collection ] プロパティが False に設定されており、SDT コレクション データ タイプに属するものを含む) の
Collection 変数を取ることもできます。詳細については、「
SDT コレクションの実装」の 2 つの方法を参照してください:
for &var in &collection
...
endfor
エクスプレッションは、変数だけでなく、
データプロバイダーまたは
プロシージャーで得られる結果にすることもできます:
for &var in DataProvider(parms)
...
endfor
for &var in Procedure(parms)
...
endfor
メソッドは記述しないようにしてください。
Upd メソッドが前提となっています。
つまり、評価の結果がコレクション、配列、または行列となる
エクスプレッションは、最後まで実行するために有効なエクスプレッションです。
注:
- 配列/行列/コレクションの値はスキャン中には変更できません。これは、&Var の値の変更は、コマンドの範囲において、対応する配列/行列/コレクションの値を変更せず、配列/行列/コレクションの値の変更は &Var の値を変更しないことを意味します。
- ベクトル/行列/コレクションの位置はスキャン中には取得できません。取得するには、カウンターとしての変数を定義する必要があります。
- これらの構造をネストして複数の配列、行列、またはコレクションをスキャンできます。この場合、同じく For in を持つサブルーチンが構造内でいつ呼び出されるのかを考慮します。
- For Each コマンドや Do While の場合と同じように、スキャンを「中断」するコマンド (Exit や Return など) を含めることができます。
-
GeneXus 16 Upgrade 3 以降の Android および Apple のユーザーイベントで使用できます。その場合、プロシージャーとデータプロバイダーを For in コマンドのエクスプレッションの一部として使用することはできません。つまり、これらのプラットフォームのユーザーイベントで For in コマンドを使用している場合、プロシージャーまたはデータプロバイダーの出力をエクスプレッションとして使用することはできません。
Collection 変数
コレクションドメイン