2017-04-14 54 views
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之前)。

回答

4

有幾件事要指出。

首先,你的代碼示例中,它使用

{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)