【问题标题】:Too many arguments when using tuples to assign array values via map使用元组通过映射分配数组值时参数过多
【发布时间】:2018-10-16 16:55:13
【问题描述】:

我在映射中使用元组来帮助我在数组中分配值,但我得到“方法更新的参数太多”

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

【问题讨论】:

    标签: arrays scala dictionary tuples


    【解决方案1】:

    使用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))
    

    【讨论】:

      【解决方案2】:

      您可以使用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"))
      

      【讨论】:

        【解决方案3】:

        在 scala 中,创建多于 1 维的数组意味着在 Arrays 中创建 Arrays:

        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),您必须修改主数组的单元格 1 (boardRep(1): Array(null, null, null))、此子数组的单元格 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))
        

        【讨论】:

          猜你喜欢
          • 2021-06-23
          • 2019-11-21
          • 1970-01-01
          • 2021-06-09
          • 2017-04-15
          • 2019-11-05
          • 2023-02-05
          • 1970-01-01
          相关资源
          最近更新 更多