【问题标题】:An efficient structure in which to keep a hash key and a collection of values一种保存散列键和值集合的有效结构
【发布时间】:2016-08-23 22:59:04
【问题描述】:

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

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

Scala 中有这样的集合吗?

【问题讨论】:

  • mutable.Map[K,mutable.Set[V]] 有什么问题?

标签: scala collections


【解决方案1】:

您正在寻找的基本结构是带有嵌套集合的地图:

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 似乎涉及两个完整的副本,但实际上并没有。除非您有特定测量性能问题,否则您应该倾向于不可变状态(以更好地确保正确性)。鉴于您当前的问题,没有任何说明表明您需要可变状态。

【讨论】:

    猜你喜欢
    • 2011-04-14
    • 2015-10-23
    • 1970-01-01
    • 1970-01-01
    • 2015-09-12
    • 1970-01-01
    • 1970-01-01
    • 2015-02-03
    • 1970-01-01
    相关资源
    最近更新 更多