Respecto a la cuestión de generar nombres de variables dinámicas mediante bucles anidadosRespecto al problema de la variable dinámica, aquí está el JSL a continuación. Quiero generar nombres de variables que combinen fruta y mes, por ejemplo, Apple_Jun. Sin embargo, el siguiente JSL no se ejecuta. ¿Cómo puedo solucionarlo?
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 );
Automatización y scriptingRe: Respecto al problema de generar nombres de variables dinámicas mediante bucles anidadosHas hecho que el JSL sea mucho más complejo de lo necesario.
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: Respecto al problema de generar nombres de variables dinámicas mediante bucles anidados
Re: Respecto al problema de generar nombres de variables dinámicas mediante bucles anidadosUno de los pocos lugares donde se necesita Analizar gramaticalmente() (y no parece haber un enfoque más sencillo a través del manejo de expresiones):
Generación de nombres de variables.
Por otro lado:
En el 99% de estos casos, uno puede alejarse un paso y buscar un enfoque más fácil para el objetivo principal.
Uno que no depende de nombres de variables personalizados.
Por ejemplo, utilice una matriz 2D, listas anidadas o una matriz asociativa de matrices asociativas.
mes de la fruta
y la indexación como
mes_de_fruta[i,j], (mes_de_fruta[i])[j] o (mes_de_fruta[mes])[fruta]
en lugar de una "matriz 2D" de nombres de variables.
Re: Respecto al problema de generar nombres de variables dinámicas mediante bucles anidadosHay casos muy limitados en los que se pueden generar nombres de variables dinámicas, y generalmente, incluso con estos, no debería hacerse. En su lugar, considere usar una estructura de datos adecuada (tabla, matriz asociativa , listas, etc.).
Ejemplo utilizando una matriz asociativa
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"]);
Versión difícil de leer
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"]);