ネストされたループを使用して動的変数名を生成する問題について動的変数の問題について、以下のJSLをご覧ください。果物と月を組み合わせた変数名(例:Apple_Jun)を生成したいのですが、以下のJSLは実行されません。どうすれば修正できますか?
FruitList = {"Apple", "Banana", "Cherry", "Durian", "Entawak"};
MonthList = {"_Jan", "_Feb", "_March", "_April", "_May"};
For( count = 1, count <= N Items( FruitList ), count++,
For( countM = 1, countM <= N Items( MonthList ), countM++,
ex = Expr(
Parse( Fruit || Month ) = 1;
);
Substitute Into( ex,
Expr( Fruit ), FruitList[Count],
Expr( Month ),
MonthList[CountM]
);
);
Eval( ex );
);
Show( Apple_Jan );
自動化とスクリプトRe: ネストされたループを使用して動的変数名を生成する問題についてJSLは必要以上に複雑になってしまった
Names Default To Here( 1 );
FruitList = {"Apple", "Banana", "Cherry", "Durian", "Entawak"};
MonthList = {"_Jan", "_Feb", "_March", "_April", "_May"};
ColNamesList = {};
For Each( {Month}, MonthList,
For Each( {Fruit}, FruitList,
Insert Into( ColNamesList, Fruit || Month )
)
);
Show( ColNamesList );
Re: ネストされたループを使用して動的変数名を生成する問題について
Re: ネストされたループを使用して動的変数名を生成する問題について解析()が必要となる数少ない場所の 1 つですが、式の処理によるより簡単な方法はないようです。
変数名の生成。
一方で:
このようなケースの 99% では、一歩ズームアウトして、主なターゲットへのより簡単なアプローチを探すことができます。
カスタム変数名に依存しないもの。
たとえば、2D 配列、ネストされたリスト、または連想配列の連想配列を使用します。
フルーツ月
そしてインデックス作成
fruit_month[i,j]、(fruit_month[i])[j] 、または(fruit_month[月])[果物]
変数名の「2D配列」の代わりに。
Re: ネストされたループを使用して動的変数名を生成する問題について動的な変数名を生成できるケースはごく限られており、そのような場合でも通常は生成すべきではありません。代わりに、適切なデータ構造(テーブル、連想配列、リストなど)の使用を検討してください。
連想配列を使用した例
Names Default To Here(1);
FruitList = {"Apple", "Banana", "Cherry", "Durian", "Entawak"};
MonthList = {"_Jan", "_Feb", "_March", "_April", "_May"};
aa = Associative Array(FruitList, Repeat({Associative Array(MonthList, As List(Repeat(1, N Items(MonthList))))}, N Items(FruitList)));
aa = Associative Array();
For Each({fruit}, fruitlist,
For Each({month}, monthlist,
If(!Contains(aa, fruit),
aa[fruit] = Associative Array();
);
aa[fruit][month] = 1;
);
);
Show(aa["Apple"]["_Jan"]);
読みにくいバージョン
Names Default To Here(1);
FruitList = {"Apple", "Banana", "Cherry", "Durian", "Entawak"};
MonthList = {"_Jan", "_Feb", "_March", "_April", "_May"};
aa = Associative Array(FruitList, Repeat({Associative Array(MonthList, As List(Repeat(1, N Items(MonthList))))}, N Items(FruitList)));
Show(aa["Apple"]["_Jan"]);