DataSetにある要素のループ処理

インデックス処理では、個別の要素スタイルごとに、その各要素を手動でループ処理する必要があります。個数が不明な軸をループ処理する方法が用意されており、ループをネストして処理する方法よりも維持が簡潔で高機能なツールです。

式を使用する方法では扱いが困難になることから、DataSetの要素をループ処理する簡潔なpf.DataSet.ForAllValuesメソッドが用意されています。個数が不明な複数の軸をスクリプトでループ処理する場合に、この方法が特に効果的です。

ForAllValuesメソッドでは、次のパラメータを使用できます。

Value function
すべての軸をループ処理しているときに実行する関数の名前。ForAllValuesで使用する関数は、以下で説明する事前定義の書式に従っている必要があります。
Target DataSet
ターゲットのDataSetを使用して、ループ処理する複数の軸を決定します。ターゲットのDataSetにあるすべてのインデックスに対してアクセスが発生します。多くの場合、このアクセスによって、後工程で変更される結果も得られます。
Additional parameters
任意の数のパラメータを追加して、値関数に渡すことができます。Lua値、テーブル、またはその他のDataSet結果を、この追加するパラメータとすることができます。

ForAllValuesの呼び出しで使用する値関数は、次のパラメータを使用して定義する必要があります。

Index
このパラメータは必須であり、その値はForAllValues関数で決まります。インデックスを使用すると、1Dベクトルに再構成したようなDataSetにアクセスできます。これは、すでに説明した単一要素のインデックス処理とは対照的です。その方法では、DataSetを多次元配列のようにインデックス処理しています。軸のエントリごとにForAllValues関数によって値関数が呼び出され、その呼び出しごとにインデックスパラメータが更新されます。
Target
ターゲットとしてForAllValues関数に指定するDataSetは、このパラメータで値関数に渡されます。このDataSetによって、ループ処理の対象となる軸が決まります。
Additional parameters
ForAllValues関数の呼び出しに追加したパラメータが値関数に渡されます。
次の例は、ForAllValues関数とそれに付随する値関数定義の使用方法を示しています。
nf1 = pf.NearField.GetDataSet("Horn.StandardConfiguration1.NearField1")
nf2 = pf.NearField.GetDataSet("modNF_indiv")
nfAverage = pf.NearField.GetDataSet("modNF_indiv")

function average(index, target, source1, source2) 
  target[index].EFieldComp1 = 0.5*(source1[index].EFieldComp1 + source2[index].EFieldComp1)
  target[index].EFieldComp2 = 0.5*(source1[index].EFieldComp2 + source2[index].EFieldComp2)
  target[index].EFieldComp3 = 0.5*(source1[index].EFieldComp3 + source2[index].EFieldComp3)
  target[index].HFieldComp1 = 0.5*(source1[index].HFieldComp1 + source2[index].HFieldComp1)
  target[index].HFieldComp2 = 0.5*(source1[index].HFieldComp2 + source2[index].HFieldComp2)
  target[index].HFieldComp3 = 0.5*(source1[index].HFieldComp3 + source2[index].HFieldComp3)
end
pf.DataSet.ForAllValues(average, nfAverage, nf1, nf2)
return nfAverage
Note: この例では、ループを定義する必要がありません。代わりに、目的の要素に対する処理を指定する関数を記述しています。任意の数のDataSetを入力として指定できます。ターゲットのDataSetに結果が保存されます。