一种有效的结构,用于保存散列键和值集合

时间:2016-08-23 22:59:04

标签: scala collections

我正在开发一个有状态的应用程序。对于状态,我需要一个具有哈希键和与该键相关的值集合的数据结构。

该集合应该是高效的并且占用尽可能少的内存。该集合应该是可变的:需要删除或添加项目。

Scala中有没有这样的集合?

1 个答案:

答案 0 :(得分: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))

我们可以看到你的第三种状态正是你在这种情况下所寻求的状态,并且你实际上并不需要可变状态去做你想要做的事情。 This post显示了一些如何操作不可变地图的示例,如果您需要更多。

请注意,如果没有,Scala会尝试复制元素。因此,虽然似乎从first_statethird_state涉及两个完整的副本,但它没有。除非您有特定的测量的性能问题,否则您应该倾向于不可变状态(为了更好地确保正确性)。鉴于你目前的问题,没有任何声明暗示你需要可变状态。