關於使用巢狀循環產生動態變數名稱的問題關於動態變數的問題,以下是 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"]);