提前帮助谢谢,我来自一个Java的背景,新斯卡拉。实践。我一直在思考一些从功能上看经典的问题。一个这样的问题是,我们有旋转通过在某些方向90度的矩阵的问题,这里是这个问题的一个例子:
https://www.geeksforgeeks.org/inplace-rotate-square-matrix-by-90-degrees/
我想要实现的功能有这样的签名:
def rotateMatrix[A](mat: Map[(Int,Int),A],n: Int):Map[(Int,Int),A] = {
mat.map {case (k,v) => k match {
case (i,j) => (???, ???) -> v
}}
}
我觉得应该有,我可以适用于i和j将其转换为旋转矩阵的坐标一些数学变换。这可能吗?
编辑:这里n是矩阵EG的大小:对3×3矩阵,n是3
我找到了答案在这里:
使用此功能可以实现为:
def rotateMatrix[A](mat: Map[(Int,Int),A],n: Int):Map[(Int,Int),A] = {
mat map {case (k,v) => k match {
case (i,j) => (j, n + 1 - i) -> v
}}
}
编辑:由@jwvh此基础上,输入可以更新到斯卡拉的单行方式:
type Matrix[A] = Map[(Int,Int),A]
def rotateMatrix[A](mat: Matrix[A],size: Int):Matrix[A] =
mat map {case ((i,j),v) => (j, size + 1 - i) -> v}