Scala中的一个矩阵的旋转,而无需使用一个2维的阵列

问题描述 投票:-1回答:1

提前帮助谢谢,我来自一个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

scala functional-programming
1个回答
0
投票

我找到了答案在这里:

https://math.stackexchange.com/questions/1676441/how-to-rotate-the-positions-of-a-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) => (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}

推荐问答