3
如何以相反順序執行zip迭代器?我需要移動子數組的元素。如何反向執行zip迭代器? - Chapel
我的代碼如下:
for (x,y) in zip({c..d by stride},{a..b by stride},){
A1[x]=A1[y];
}
我需要以相反的順序執行此(即乙 - >甲& d - > c)中,以避免在重疊區域的情況下,覆蓋。 (a..b總是在c..d之前)。
如何以相反順序執行zip迭代器?我需要移動子數組的元素。如何反向執行zip迭代器? - Chapel
我的代碼如下:
for (x,y) in zip({c..d by stride},{a..b by stride},){
A1[x]=A1[y];
}
我需要以相反的順序執行此(即乙 - >甲& d - > c)中,以避免在重疊區域的情況下,覆蓋。 (a..b總是在c..d之前)。
有幾件事要指出。
首先,你的代碼示例中,它使用
{c..d by stride}
例如。 {}創建一個域變量,但你只是想遍歷它。你可以直接遍歷一個範圍,這在語法上既簡單又快捷。即不寫
for i in {1..10} { ... } // unncessary domain
而是寫這
for i in 1..10 { ... } // good
現在,你的問題。迭代遍歷一個範圍反過來是一個負面的步伐。像這樣:
for i in 1..5 by -1 {
writeln(i);
}
輸出
5
4
3
2
1
這種反向迭代可以拉鍊,像這樣:
for (i,j) in zip(1..5 by -1, 10..50 by -10) {
writeln((i,j));
}
輸出
(5, 50)
(4, 40)
(3, 30)
(2, 20)
(1, 10)