如何反向执行 zip 迭代器? - 礼拜堂
How do I perform a zip iterator in reverse? - Chapel
如何以相反的顺序执行 zip 迭代器?我需要移动子数组的元素。
我的代码如下:
for (x,y) in zip({c..d by stride},{a..b by stride},){
A1[x]=A1[y];
}
我需要以相反的顺序执行此操作(即 b-->a & d-->c )以避免在重叠区域的情况下覆盖。 (a..b 总是在 c..d 之前)。
有几点需要指出。
首先,在您的代码示例中,它使用
{c..d by stride}
例如。 { } 创建一个域变量,但您只想迭代它。您可以直接遍历一个范围,这在语法上更简单也更快。 IE。不要写
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)
如何以相反的顺序执行 zip 迭代器?我需要移动子数组的元素。
我的代码如下:
for (x,y) in zip({c..d by stride},{a..b by stride},){
A1[x]=A1[y];
}
我需要以相反的顺序执行此操作(即 b-->a & d-->c )以避免在重叠区域的情况下覆盖。 (a..b 总是在 c..d 之前)。
有几点需要指出。
首先,在您的代码示例中,它使用
{c..d by stride}
例如。 { } 创建一个域变量,但您只想迭代它。您可以直接遍历一个范围,这在语法上更简单也更快。 IE。不要写
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)