Вложено для l oop в kotlin с началом в во внутреннем цикле - PullRequest
1 голос
/ 27 февраля 2020

Я не сразу выясняю синтаксис для этого, но я хочу сделать это java «правильно» в kotlin:

for(int i = 0; i < array.length; i++) {
  for(int j = i; j < array.length; j++) {
    // do something here.
  }
}

Важным битом является то, что внутренний l oop начинается с любого текущего значения i.

Я могу сделать что-то вроде этого ...

for((i, num1) in array.withIndex()) {
  for((j, num2) in array.withIndex()) {
    // do something here.
  }
}

, но проблема в том, что это начнется с 0 вместо того, чтобы перейти к я. Я мог бы использовать диапазон, а затем напрямую обращаться к массиву, но не уверен, есть ли что-то более чистое в kotlin для такого типа ситуаций. Лучшее, о чем я могу думать, это ...

for(i in 0..(array.size)) {
  for(j in i..array.size)) {
    // do something here, access array directly with indices.
  }
}

Это лучшее, что я собираюсь сделать в этом контексте?

1 Ответ

3 голосов
/ 27 февраля 2020

Диапазоны - это самый чистый способ получения эквивалента Java for(;;) l oop. Как правило, если диапазон объявляется на месте, компилятор даже компилирует его как for(;;), поэтому не требуется создавать экземпляр объекта Range.

Но вам нужно использовать until вместо .., поскольку диапазоны включительно.

for (i in array.indices) {
    for (j in i until array.size) {
        //...
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...