使用元组通过map分配数组值时参数太多

时间:2018-05-06 21:44:30

标签: arrays scala dictionary tuples

我在地图中使用一个元组来帮助我在数组中赋值,但是我得到“方法更新的参数太多了”

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”的数组中。我做错了什么?

3 个答案:

答案 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))