如何反向执行zip迭代器? - 教堂

时间:2017-04-14 05:32:38

标签: zipper 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之前)。

1 个答案:

答案 0 :(得分: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)