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_state
到third_state
涉及兩個完整的副本,但它並沒有。除非你有一個特定的和測量性能問題,你應該傾向於不可改變的狀態(爲了更好地保證正確性)。鑑於你目前的問題,沒有任何表明表明你需要可變狀態。
'mutable.Map [K,mutable.Set [V]]'有什麼問題? – Alec