2012-04-27 60 views
3

我想知道如何(如果可能)我可以通過HashMap[Int, Vector[Int]]做出(可變)圖的鄰接表表示。當然,HashMap是可變的。用HashMap [Int,Vector [Int]](Scala)表示圖形(鄰接列表)?

目前我把它設置爲HashMap[Int, ArrayBuffer[Int]],但我可以更改ArrayBuffer中的每個單元格的事實讓我感到不舒服,儘管我確信我沒有這樣做。我會使用ListBuffer[Int],但我想快速隨機訪問鄰居,因爲我需要在圖上進行快速隨機漫步。 A Vector[Int]可以解決這個問題,但無論如何要做到這一點?

據我所知,(在REPL嘗試這樣),這是不行的:

scala> val x = new mutable.HashMap[Int, Vector[Int]] 
x: scala.collection.mutable.HashMap[Int,Vector[Int]] = Map() 

scala> x(3) = Vector(1) 

scala> x(3) += 4 // DOES NOT WORK 

我需要能夠既追加到它在任何時候,還內它訪問任何元素隨機(給定指數)。這可能嗎?

謝謝! -kstruct

+0

你知道斯卡拉-圖? http://www.assembla.com/spaces/scala-graph/wiki – 2012-04-28 12:09:45

+0

是的 - 這個項目主要是爲了讓自己更熟悉Scala,爲了我使用它,我只需要一個基本的圖類,沒有什麼太花哨。 – adelbertc 2012-04-28 19:11:11

回答

5

使用Vector:

x += 3 -> (x(3) :+ 4) //x.type = Map(3 -> Vector(1, 4)) 

您可能注意到,如果沒有現有的密鑰,這將失敗,所以你可能會想建立自己的地圖爲

val x = new mutable.HashMap[Int, Vector[Int]] withDefaultValue Vector.empty 
+1

太棒了,正是我在找的東西 - 謝謝! – adelbertc 2012-04-28 07:03:25