Zum Thema der Generierung dynamischer Variablennamen mithilfe verschachtelter SchleifenZum Problem mit den dynamischen Variablen finden Sie unten das JSL. Ich möchte Variablennamen generieren, die Obst und Monat kombinieren, zum Beispiel Apple_Jun. Das folgende JSL funktioniert jedoch nicht. Wie kann ich das Problem beheben?
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 );
Automatisierung und SkriptingBetreff: Zum Problem der Generierung dynamischer Variablennamen mithilfe verschachtelter SchleifenSie haben die JSL weitaus komplexer gemacht als erforderlich
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 );
Betreff: Zum Problem der Generierung dynamischer Variablennamen mithilfe verschachtelter Schleifen
Betreff: Zum Problem der Generierung dynamischer Variablennamen mithilfe verschachtelter SchleifenEiner der wenigen Orte, an denen Parse() benötigt wird – und es scheint keinen einfacheren Ansatz über die Ausdrucksbehandlung zu geben:
Generierung von Variablennamen.
Auf der anderen Seite:
In 99 % dieser Fälle kann man einen Schritt herauszoomen und nach einem einfacheren Ansatz für das Hauptziel suchen.
Eines, das nicht auf benutzerdefinierte Variablennamen angewiesen ist.
Verwenden Sie beispielsweise ein 2D-Array, verschachtelte Listen oder ein assoziatives Array assoziativer Arrays.
Fruchtmonat
und Indizierung wie
Fruchtmonat[i,j], (Fruchtmonat[i])[j] oder (Obst_Monat[Monat])[Obst]
anstelle eines „2D-Arrays“ von Variablennamen.
Betreff: Zum Problem der Generierung dynamischer Variablennamen mithilfe verschachtelter SchleifenEs gibt nur sehr wenige Fälle, in denen Sie dynamische Variablennamen generieren können, und selbst in diesen Fällen sollten Sie dies normalerweise nicht tun. Verwenden Sie stattdessen eine geeignete Datenstruktur (Tabelle, assoziatives Array , Listen usw.).
Beispiel für die Verwendung eines assoziativen Arrays
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"]);
Schwer lesbare Version
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"]);