Scala algorithm: Reshape a matrix
Published
Algorithm goal
Turn an m-by-n matrix into an n-by-m matrix, retaining the order of the elements. For example:
1 | 2 | 3 |
4 | 5 | 6 |
Becomes:
1 | 2 |
3 | 4 |
5 | 6 |
Test cases in Scala
assert(reshapeMatrix(Vector.empty) == Vector.empty)
assert(reshapeMatrix(Vector(Vector(1))) == Vector(Vector(1)))
assert(reshapeMatrix(Vector(Vector(1, 2))) == Vector(Vector(1), Vector(2)))
assert(
reshapeMatrix(Vector(Vector(1, 2), Vector(3, 4))) ==
Vector(Vector(1, 2), Vector(3, 4))
)
assert(
reshapeMatrix(Vector(Vector(1, 2, 3), Vector(4, 5, 6))) ==
Vector(Vector(1, 2), Vector(3, 4), Vector(5, 6))
)
Algorithm in Scala
4 lines of Scala (compatible versions 2.13 & 3.0), showing how concise Scala can be!
Get the full algorithm !
or
'Unlimited Scala Algorithms' gives you access to all the 100 published Scala Algorithms!
Upon purchase, you will be able to Register an account to access all the algorithms on multiple devices.
Explanation
In Scala this is straightforward: flatten the whole matrix, and then group the elements into chunks of length of the height of the matrix (.grouped). (this is © from www.scala-algorithms.com)
Scala concepts & Hints
View
The
.view
syntax creates a structure that mirrors another structure, until "forced" by an eager operation like .toList, .foreach, .forall, .count.