Слишком много аргументов при использовании кортежей для назначения значений массива через карту - PullRequest
0 голосов
/ 07 мая 2018

Я использую кортеж в карте, чтобы помочь мне присвоить значения в массиве, но я получаю «слишком много аргументов для обновления метода»

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
  }
}

Это должно получиться в массиве с "alex" в (1,1) месте и "Jade" в (2,2) месте. Что я делаю неправильно?

Ответы [ 3 ]

0 голосов
/ 07 мая 2018

Вы можете использовать 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"))
0 голосов
/ 07 мая 2018

Используя 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))
0 голосов
/ 07 мая 2018

В Scala создание массива более 1 измерения означает создание массивов внутри массивов:

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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...