kotlin intProgression не повторяется? - PullRequest
0 голосов
/ 22 ноября 2018

Извините, это кажется очень простым, но я что-то упустил

У меня есть переопределение сигнатуры метода

fun doSomeWork (range: IntProgression, j: Int): List<Cell>{

Я хочу перебрать диапазон, какой бы он ни был (может быть вверх или внизскажем от 1 до 4 или от 4 до 1).Кажется, что сам диапазон работает, так что на моем примере от 4 до 1

    println (range.first.toString() + " to " + range.last.toString() + ", step = " + range.step)

печатает «4 к 1, шаг = 1»

, но я не могу повторить диапазон?Я попробовал несколько вещей

for (i in range) {
     println ("range: $i)"
}

, а затем

for (i in range.first until range.last step range.step){
        println ("Loop de loop $i")
    }

(хотя, когда я писал этот вопрос, я заметил, что это шаг 1 не -1, который может быть проблемой здесь? Но какЯ хочу иметь возможность проходить в любом направлении, которое я не проверял)

, а затем

 range.forEach { println ("range foreach") }

никто из них ничего не печатает, но не выдает ошибкупоэтому любой код после этого проходит правильно.

Кто-нибудь может указать, почему я не могу выполнить эту задачу начального уровня?!

Ответы [ 3 ]

0 голосов
/ 22 ноября 2018

Итак, вы хотите IntProgression от 4 до 1 с шагом -1, то есть IntProgression.fromClosedRange(4, 1, -1) или еще лучше: 4.downTo(1).Пока вы писали свой вопрос, вы уже поняли шаг ... но тогда отправной точкой является не 1, а 4 ;-) С downTo таких проблем не возникнет,так как функция заботится о направлении и она более читабельна.

Обратите внимание, что вы можете просто использовать reversed, чтобы обратить прогрессию:

range.reversed()

и используйте его в for -цикле или с .forEach и т. д.

Итак:

val range = IntProgression.fromClosedRange(1, 4, 1)
range.forEach(::print) // prints: 1234
range.reversed().forEach(::print) // prints: 4321
0 голосов
/ 22 ноября 2018

Метод forEach можно использовать для итерации по IntProgression.it может использоваться для получения значения или индекса.

fun doSomeWork (range: IntProgression) {
    range.forEach {
        println(it)
    }
}

Вызов вышеуказанного метода: -

ClassName().doSomeWork(IntProgression.fromClosedRange(1,10, 1))
0 голосов
/ 22 ноября 2018
val range= IntProgression.fromClosedRange(1, 4, 1)

for (i in range)
println(i) // out put 1234

for (i in range.reversed())
    println(i)//out put 4321

используйте

IntProgression.fromClosedRange(start, end, step)

для обратного диапазона

  IntProgression.reversed()

подробнее см. Диапазоны

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...