ответ yole - это почти наверняка самый простой и эффективный подход.
Но вы можете взглянуть на одну альтернативу, заключающуюся в сжатие последовательностей, например:
for ((i, j) in sequence{ yieldAll(0 until 6) }.zip(sequence{ yieldAll(0 until 6 step 2) })) {
// code here
}
Это гораздо более читабельно при использованиивспомогательная функция, например:
fun <T, U> seqs(it1: Iterable<T>, it2: Iterable<U>)
= sequence{ yieldAll(it1) }.zip(sequence{ yieldAll(it2) })
for ((i, j) in seqs(0 until 6, 0 until 6 step 2)) {
// code here
}
Это менее эффективно (изначально создавая итерации, диапазоны и последовательности, а затем пару для каждой итерации).Но это точный эквивалент кода в вопросе.И поскольку он определяет каждый диапазон в одном месте, он, по крайней мере, делает их очень ясными.
(я думаю, что для этого нужен Kotlin 1.3. Возможно, существуют более простые и / или более общие способы сделать это; не стесняйтесьотредактируйте это, если вы можете улучшить это!)