【问题标题】:Scala: Set operations that update the collection?Scala:设置更新集合的操作?
【发布时间】:2016-07-22 17:39:49
【问题描述】:

我正在查看可变的Set 类并查看unionintersectdiff 等。所有这些集合操作都会创建一个新的Set。我很好奇是否有办法更新Set 而不是创建一个新的。否则,我必须从val 切换到var,否则我必须跟进其他步骤。

如果我不清楚,请考虑 .NET 的 HashSet 类。它具有修改集合的IntersectWithExceptWithUnionWith。而 LINQ 扩展方法 IntersectExceptUnion 创建新集合。我希望找到与“With”变体等效的东西。

这是一种从头开始重建集合的低效方法:

val temp = original.diff(other)
original.clear()
original ++= temp

显然,这样做会更有效率:

for (value <- other if original.contains(value)) {
    original.remove(value)
}

【问题讨论】:

  • 你的意思是切换varval 可能吗? :)
  • 不,valvar。我想保持对同一个集合的相同引用。我想改变该集合而不是替换对新集合的引用。
  • 我的错。非常正确。一个 val 到一个可变集合。菜鸟失误。

标签: scala collections set mutable


【解决方案1】:

见:http://docs.scala-lang.org/overviews/collections/sets.html#operations-in-class-mutableset

例如:

添加:xs += x 添加元素 x 以将 xs 设置为副作用和 返回 xs 本身。

所以忽略返回的值。该集合应就地更新。

【讨论】:

  • 想象一下我想要一个diff,这样原来的Set 就不再包含另一个集合中的值了。原始集合应该缩小。我需要找到需要删除的元素,然后从原始集合中找到 -= 它们。关注?
  • 嗯,这不是你问的 :-) 你可以-= 一系列项目,它应该有你想要的效果。 -= 应该对不在集合中的项目无效。
猜你喜欢
  • 2021-11-05
  • 2011-08-09
  • 1970-01-01
  • 2013-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-26
相关资源
最近更新 更多