Как выполнить итератор zip в обратном порядке? Часовня
Как выполнить итератор 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 ответ
Несколько вещей, на которые стоит обратить внимание.
Во-первых, в вашем примере кода он использует
{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)