向hashmap添加元素时Scala类型不匹配

时间:2016-01-02 17:21:40

标签: scala

我在变量a中表示Scala中的图形邻接列表。

        val a = new HashMap[Int, Vector[Tuple2[Int, Int]]] withDefaultValue Vector.empty
        for(i <- 1 to N) {                
            val Array(x, y, r) = readLine.split(" ").map(_.toInt)
            a(x) += new Tuple2(y, r)
            a(y) += new Tuple2(x, r)
        }

我依次阅读每个边缘(xy是节点,而r是边缘的成本)。阅读之后,我将其添加到邻接列表中。

但是,在将包含邻居节点的元组和成本添加到HashMap时,我得到:

Solution.scala:17: error: type mismatch;
 found   : (Int, Int)
 required: String
                a(x) += new Tuple2(y, r)

我不明白为什么要String。我没有在任何地方指定String

2 个答案:

答案 0 :(得分:3)

+=是连接到String的运算符。

您可能希望执行以下操作:a.update(x, a.getOrElse(x, Vector()) :+ (x, r))

答案 1 :(得分:2)

此外,您正在Scala中编写Java代码。它编译,但相当于滥用语言:/

下次考虑做这样的事情:

val a = Range(1, N)
   .map { _ => readline.split(" ").map (_.toInt) }
   .flatMap { case Array(x, y, r) => 
       Seq(x -> (y, r), y -> (x, r)) 
   }
   .groupBy(_._1)
   .mapValues { _.map ( _._2) }