将Map中的Map(key,Set [value])附加到Scala 2.11中的现有Key

Roh*_*ala 5 functional-programming scala

我试图将新值附加到现有键的Set(Values)上,但是它将替换现有值。

这是我的意见

val roads = Array(Array(0,1),Array(0,2),Array(1,2))
Run Code Online (Sandbox Code Playgroud)

预期产量:

Map(0 -> Set(1,2),1 -> Set(2))
Run Code Online (Sandbox Code Playgroud)

我的代码:

  val roads = Array(Array(0,1),Array(0,2),Array(1,2))
  var adjMatrix:Map[Int,Set[Int]] = Map()

  for(i <- 0 until roads.size; j <- 1 until roads(i).size){
    adjMatrix += (roads(i)(0) -> Set(roads(i)(j)))
  }
Run Code Online (Sandbox Code Playgroud)

当我做的时候

  adjMatrix.foreach(println)
Run Code Online (Sandbox Code Playgroud)

我得到以下结果,因为有两个键的名称为0,它替换了第0个索引处的(0,1)元素

(1,Set(2))
(0,Set(2))
Run Code Online (Sandbox Code Playgroud)

Mar*_*lic 5

尝试

roads
  .groupBy(a => a(0))
  .map { case (key, value) => key -> (value.flatten.toSet - key) }
Run Code Online (Sandbox Code Playgroud)

哪个输出

Map(1 -> Set(2), 0 -> Set(1, 2))
Run Code Online (Sandbox Code Playgroud)