Использование slice()
в массиве:
array = arrayOf(array.last()) + array.sliceArray(0 until array.size - 1)
перестановка массива путем помещения последнего элемента в 1-е положение и смещения остальных вправо.
var array = arrayOf(1, 2, 3, 4)
(0 until array.size).forEach {
array.forEach { print(it.toString() + " ") }
println()
array = arrayOf(array.last()) + array.sliceArray(0 until array.size - 1)
}
будетпечать:
1 2 3 4
4 1 2 3
3 4 1 2
2 3 4 1
Тот же результат может быть достигнут с:
array = arrayOf(array.last()) + array.filterIndexed { index, _ -> index < array.size - 1 }.toTypedArray()
Эта функция расширения:
fun <T> Array<T>.rightCycle(d: Int): Array<T> {
val n = d % size
if (n == 0) return this
return sliceArray(size - n until size) + sliceArray(0 until size - n)
}
может использоваться для циклического повторения любого массива d
мест каждый раз:
var array = arrayOf(1, 2, 3, 4, 5, 6)
(0 until array.size).forEach {
array.forEach { print(it.toString() + " ") }
println()
array = array.rightCycle(2)
}
напечатает:
1 2 3 4 5 6
5 6 1 2 3 4
3 4 5 6 1 2
1 2 3 4 5 6
5 6 1 2 3 4
3 4 5 6 1 2