Я хочу, чтобы он транспонировал матрицу. Меня так впечатлила функция обмена в kotlin.
var a = 1
var b = 2
a = b.also { b = a }
println(a) // print 2
println(b) // print 1
Теперь я пытаюсь использовать ее в своей функции транспонирования (я обнаружил, что она работает только с матрицей sqaure, но это не в этом дело).
class Matrix(val matrix : Array<DoubleArray>){
val rowSize = matrix.size
val colSize = matrix[0].size
}
fun transposeMatrix(matrix: Matrix): Matrix {
return Matrix(matrix.matrix.mapIndexed { rowindex, row ->
row.mapIndexed { colindex, element ->
if (rowindex > colindex) {
matrix.matrix[colindex][rowindex].also {
matrix.matrix[colindex][rowindex] = element
} // this one should "swap" two elements
} else {
element
}
}.toDoubleArray()
}.toTypedArray())
}
"swap" не работает.
Enter new matrix:
3 6 9
2 5 10
1 1 0.5
3.0 6.0 9.0
6.0 5.0 10.0
9.0 10.0 0.5
Я думаю, что эта часть равна
element = matrix.matrix[colindex][rowindex].also {matrix.matrix[colindex][rowindex] = element}
, что идеально соответствует формату.
Теперь я действительно запутался. В чем разница между двумя кодами? почему мой не работает?