Concernant la question de la génération de noms de variables dynamiques à l'aide de boucles imbriquéesConcernant le problème des variables dynamiques, voici le JSL ci-dessous. Je souhaite générer des noms de variables combinant des fruits et des mois, par exemple, Pomme_Juin. Cependant, le JSL suivant ne fonctionne pas. Comment résoudre ce problème ?
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 );
Automatisation et scriptsObjet : Concernant la génération de noms de variables dynamiques à l'aide de boucles imbriquéesVous avez rendu le JSL beaucoup plus complexe que nécessaire
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 );
Objet : Concernant la génération de noms de variables dynamiques à l'aide de boucles imbriquées
Objet : Concernant la génération de noms de variables dynamiques à l'aide de boucles imbriquéesL'un des rares endroits où Analyser() est nécessaire - et il ne semble pas y avoir d'approche plus simple via la gestion des expressions :
génération de noms de variables.
D'autre part:
Dans 99 % des cas, on peut prendre du recul et rechercher une approche plus simple pour la cible principale.
Un système qui ne repose pas sur des noms de variables personnalisés.
par exemple, utilisez un tableau 2D, des listes imbriquées ou un tableau associatif de tableaux associatifs.
mois_des_fruits
et l'indexation comme
fruit_mois[i,j], (fruit_mois[i])[j] ou (fruit_month[mois])[fruit]
au lieu d'un « tableau 2D » de noms de variables.
Objet : Concernant la génération de noms de variables dynamiques à l'aide de boucles imbriquéesIl existe très peu de cas où vous pouvez générer des noms de variables dynamiques, et même dans ce cas, ce n'est généralement pas recommandé. Privilégiez plutôt une structure de données appropriée (tableau, tableau associatif , liste, etc.).
Exemple utilisant un tableau associatif
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"]);
Version difficile à lire
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"]);