2016-08-23 58 views
0

我正在開發一個有狀態的應用程序。對於狀態,我需要一個具有散列鍵和與該鍵相關的值集合的數據結構。有效的結構,其中保留一個散列鍵和值的集合

該集合應該是有效的並佔用儘可能少的內存量。該集合應該是可變的:項目需要被刪除或添加。

在斯卡拉有沒有這樣的收藏?

+3

'mutable.Map [K,mutable.Set [V]]'有什麼問題? – Alec

回答

0

你要找的基本結構是一個嵌套集合圖:

Map[K, Set[V]] 

通常情況下,它被認爲是使用一成不變的值的最佳做法:

val first_state: Map[String, Set[String]] = Map("A key" -> Set("Alpha", "Omega")) 
val second_state = first_state + ("Another key" -> Set("Theta", "Iota")) 
val third_state = second_state + ("Another key" -> Set("Kappa")) 

上述結果在下列值中:

first_state: Map[String,Set[String]] = Map(A key -> Set(Alpha, Omega)) 
second_state: scala.collection.immutable.Map[String,Set[String]] = Map(A key -> Set(Alpha, Omega), Another key -> Set(Theta, Iota)) 
third_state: scala.collection.immutable.Map[String,Set[String]] = Map(A key -> Set(Alpha, Omega), Another key -> Set(Kappa)) 

我們可以看到你的第三個狀態正是y你會在這種情況下尋找,並且你實際上並不需要可變狀態來做你想做的事情。 This post顯示了大量如何操作不可變映射的示例,如果需要更多。

請注意,斯卡拉試圖而不是副本元素,如果它不必。因此,雖然看起來從first_statethird_state涉及兩個完整的副本,但它並沒有。除非你有一個特定的測量性能問題,你應該傾向於不可改變的狀態(爲了更好地保證正確性)。鑑於你目前的問題,沒有任何表明表明你需要可變狀態。

相關問題