我在地图中使用一个元组来帮助我在数组中赋值,但是我得到“方法更新的参数太多了”
val a = Map((1,1) -> "alex", (2,2) -> "Jade")
val boardRep = Array.ofDim[String](3, 3)
a foreach {
case (key, value) => {
boardRep((key._1), (key._2)) = value
}
}
这应该出现在(1,1)点的“alex”和(2,2)点的“Jade”的数组中。我做错了什么?
答案 0 :(得分:1)
在scala中,创建一个包含多个维度的数组意味着在数组中创建数组:
scala> val boardRep = Array.ofDim[String](3, 3)
boardRep: Array[Array[String]] = Array(Array(null, null, null), Array(null, null, null), Array(null, null, null))
因此,要修改单元格(1, 1)
,您必须修改主数组(boardRep(1)
:Array(null, null, null)
)的单元格1,此子单元格的单元格1数组(boardRep(1)(1)
)
a foreach {
case (key, value) =>
// boardRep((key._1), (key._2)) = value
boardRep(key._1)(key._2) = value
}
然后给出:
Array(Array(null, null, null), Array(null, alex, null), Array(null, null, Jade))
答案 1 :(得分:1)
您可以使用arr(key1)(key2)
访问二维数组:
@ a foreach {
case (key, value) => {
boardRep(key._1)(key._2) = value
}
}
@ boardRep
res8: Array[Array[String]] = Array(Array(null, null, null), Array(null, "alex", null), Array(null, null, "Jade"))
答案 2 :(得分:0)
使用Array.tabulate
可以创建一个数组并通过应用给定函数填充(某些)单元格;在这种情况下
Array.tabulate(3,3){ (i, j) => a.getOrElse((i,j), null) }
递送
Array(Array(null, null, null), Array(null, alex, null), Array(null, null, Jade))