котлин, как динамически изменить за кругом темп - PullRequest
0 голосов
/ 04 июня 2018

иногда, основываясь на каком-то условии, он может захотеть прыгнуть (или двигаться вперед) на несколько шагов внутри цикла for,

как это сделать - kolin?

упрощенный вариант использования:

val datArray  = arrayOf(1, 2, 3......)

/**
 * start from the index to process some data, return how many data has been 
   consumed
*/
fun processData_1(startIndex: Int) : Int  {
   // process dataArray starting from the index of startIndex
   // return the data it has processed
}
fun processData_2(startIndex: Int) : Int  {
   // process dataArray starting from the index of startIndex
   // return the data it has processed
}

в Java это может быть:

for (int i=0; i<datArray.lenght-1; i++) {
   int processed = processData_1(i);
   i += processed; // jump a few steps for those have been processed, then start 2nd process
   if (i<datArray.lenght-1) { 
       processed = processData_2(i);
       i += processed;
   }
}

Как это сделать в kotlin?

for(i in array.indices){
  val processed = processData(i);
  // todo
}

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

Вы можете сделать это с помощью continue, как указано в документации Kotlin здесь: https://kotlinlang.org/docs/reference/returns.html

Пример:

val names = arrayOf("james", "john", "jim", "jacob", "johan")
for (name in names) {
    if(name.length <= 4) continue
    println(name)
}

Это будет печатать только имена длиннее 4 символов (какон пропускает имена длиной от 4 и ниже)

Редактировать: пропускает только одну итерацию за раз.Поэтому, если вы хотите пропустить несколько, вы можете сохранить состояние процесса в другом месте и проверить состояние для каждой итерации.

0 голосов
/ 04 июня 2018

С while:

var i = 0

while (i < datArray.length - 1) {
    var processed = processData_1(i)
    i += processed // jump a few steps for those have been processed, then start 2nd process
    if (i < datArray.length - 1) {
        processed = processData_2(i)
        i += processed
    }
    i++
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...