Scala: использование массива в качестве части «значения» карты - PullRequest
3 голосов
/ 26 апреля 2019

Первая часть кода ниже успешно хранит кортеж в значащей части карты.Вторая часть - моя попытка сохранить массив вместо кортежа.Это не работает.Что не так?

    object MyClass {

    def main(args: Array[String]) {
        val m1 = Map("fname" -> (1,2), "lname" -> (3,4))
        for ((k,v) <- m1) printf("key: %s, value: %s, 0: %s\n", k, v, v._1)

        var states = scala.collection.mutable.Map[String, new Array[Int](3)]()
        val states += ("fname" -> (1,2,3))
        val states += ("lname" -> (4,5,6))
        for ((k,v) <- states) printf("key: %s, value: %s, 0: %s\n", k, v, v._1)         
    }
}

Вот ошибки, которые я получаю.

Here are the errors I get

Как только я понимаю синтаксис для выполнения работыЯ также хочу получить доступ к отдельным элементам в массиве.

1 Ответ

6 голосов
/ 26 апреля 2019

Array[Int] является типом.new Array[Int](3) является значением.При объявлении Map вам нужны типы, а не значения: Map[String,Array[Int]]

(1,2,3) - это кортеж (или 3-кортеж), но вам нужен массив: Array(1,2,3)

v._1 - это первый элемент кортежа, но вы хотите первый элемент массива: v(0) или v.head

Это компилируется.

var states = scala.collection.mutable.Map[String,Array[Int]]()
states += ("fname" -> Array(1,2,3))
states += ("lname" -> Array(4,5,6))
for ((k,v) <- states) printf("key: %s, value: %s, 0: %s\n", k, v, v(0))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...