关于使用嵌套循环生成动态变量名的问题关于动态变量的问题,以下是 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 );
自动化和脚本回复:关于使用嵌套循环生成动态变量名的问题你让 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 );
回复:关于使用嵌套循环生成动态变量名的问题
回复:关于使用嵌套循环生成动态变量名的问题需要解析()的少数几个地方之一 - 而且似乎没有通过表达式处理更简单的方法:
变量名的生成。
另一方面:
在 99% 的此类情况下,人们可以缩小一步并寻找更容易接近主要目标的方法。
不依赖于自定义变量名。
例如,使用二维数组、嵌套列表或关联数组的关联数组。
水果月
和索引类似
fruit_month[i,j],(fruit_month[i])[j]或(fruit_month[月份])[水果]
而不是变量名称的“2D数组”。
回复:关于使用嵌套循环生成动态变量名的问题在极少数情况下,您可以生成动态变量名,通常情况下,即使有这种情况,也不应该这样做。相反,请考虑使用适当的数据结构(表、关联数组、列表等)。
使用关联数组的示例
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"]);