我试图通过定义大小为2 * 3的空矩阵来转置大小为3 * 2的矩阵,我如何创建一个空矩阵?我在注释的代码段中遗漏了一些东西!
type Row = List[Int]
type Matrix = List[Row]
val m:Matrix = List(1 :: 2 :: Nil, 3 :: 4 :: Nil, 5 :: 6 :: Nil)
def transpose(m:Matrix):Matrix = {
val rows = m.size
val cols = m.head.size
val trans= List(List())(rows(cols)) // Int doesn't take parameter
for (i <- 0 until cols) {
for (j <- 0 until rows) {
trans(i)(j) = this (j)(i)
}
}
return trans
}
答案 0 :(得分:2)
当需要通过index
访问元素时,Vector
或Array
比List
更有效率。
这是解决方案的Vector
版本。
type Row = Vector[Int]
type Matrix = Vector[Row]
val m:Matrix = Vector(Vector(1,2), Vector(3,4), Vector(5,6))
def transpose(mat:Matrix) = {
def size[A](v: Vector[A]): Int = { var x =0; for(i<-v) x+=1; x}
for (i <-Range(0,size(mat(0)))) yield for(j <-Range(0,size(mat))) yield mat(j)(i)
}
在REPL中测试:
scala> transpose(m)
res12: scala.collection.immutable.IndexedSeq[scala.collection.immutable.IndexedSeq[Int]] = Vector(Vector(1, 3, 5), Vector(2,
4, 6))