Per quanto riguarda il problema della generazione di nomi di variabili dinamiche utilizzando cicli annidatiPer quanto riguarda il problema delle variabili dinamiche, ecco il codice JSL qui sotto. Voglio generare nomi di variabili che combinano "frutta" e "mese", ad esempio "Apple_Jun". Tuttavia, il codice JSL seguente non funziona. Come posso risolvere il problema?
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 );
Automazione e scriptingRe: Riguardo al problema della generazione di nomi di variabili dinamiche utilizzando cicli annidatiHai reso il JSL molto più complesso del necessario
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: Riguardo al problema della generazione di nomi di variabili dinamiche utilizzando cicli annidati
Re: Riguardo al problema della generazione di nomi di variabili dinamiche utilizzando cicli annidatiUno dei pochi casi in cui è necessario Analizza() , e non sembra esserci un approccio più semplice tramite la gestione delle espressioni:
generazione di nomi di variabili.
D'altra parte:
Nel 99% dei casi, è possibile fare un passo indietro e cercare un approccio più semplice per raggiungere l'obiettivo principale.
Uno che non si basa su nomi di variabili personalizzati.
ad esempio utilizzare un array 2D, elenchi annidati o array associativi di array associativi.
mese_frutta
e indicizzazione come
mese_frutta[i,j], (mese_frutta[i])[j] o (fruit_month[mese])[fruit]
invece di un "array 2D" di nomi di variabili.
Re: Riguardo al problema della generazione di nomi di variabili dinamiche utilizzando cicli annidatiEsistono casi molto limitati in cui è possibile generare nomi di variabili dinamici e, di solito, anche in questi casi, non è consigliabile. Si consiglia invece di utilizzare una struttura dati appropriata (tabella, array associativo , elenco, ecc.).
Esempio di utilizzo di array associativi
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"]);
Versione difficile da leggere
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"]);