reik.schatz
11/26/2018, 3:25 PMval start = 0
and listOf(3, 3, 3, 2)
representing sizes of IntRange’s, whats the simplest way to turn this into a list of IntRanges? expected outcome listOf(IntRange(0, 2), IntRange(3, 5), IntRange(6, 8), IntRange(9, 10))
diesieben07
11/26/2018, 3:34 PMval start = 0
val list = listOf(3, 3, 3, 2)
val seq = sequence {
var curr = start
for (el in list) {
val next = curr + el
yield(curr until next)
curr = next
}
}
reik.schatz
11/26/2018, 3:39 PMJoris PZ
11/26/2018, 3:42 PMval sizes = listOf(3, 3, 3, 2)
var start = 0
val ranges = sizes.map { size -> IntRange(start, start + size - 1).also {
start += size
}
}
diesieben07
11/26/2018, 3:42 PMmap
and friends tbhJoris PZ
11/26/2018, 3:43 PMreik.schatz
11/26/2018, 3:47 PMalex
11/26/2018, 4:23 PMval start = 0
val list = listOf(3, 3, 3, 2)
val listNew = list.drop(1).fold(listOf(IntRange(start, list.first() - 1))) { acc, v ->
val r = acc.last().last
acc + listOf(IntRange(r + 1, r + v))
}
println(listNew)
But I'd recommend use simple for loop instead, since it's easier to read and understandilya.gorbunov
11/26/2018, 4:59 PMval ranges = sizes
.fold(listOf(start)) { stops, length -> stops + (stops.last() + length) }
.zipWithNext { s, e -> s until e }
https://pl.kotl.in/SJrwLstRQreik.schatz
11/27/2018, 9:10 AM