Как выполнить итератор 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).


person xSooDx    schedule 14.04.2017    source источник


Ответы (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)
person mppf    schedule 14.04.2017