Scala:设置更新集合的操作?

Scala: Set operations that update the collection?

提问人:Travis Parks 提问时间:7/23/2016 最后编辑:Travis Parks 更新时间:7/23/2016 访问量:764

问:

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

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

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

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

显然,这样做会更有效:

for (value <- other if original.contains(value)) {
    original.remove(value)
}
斯卡拉 收集 设置 可变

评论

0赞 Alec 7/23/2016
你的意思是切换到也许?:)varval
0赞 Travis Parks 7/23/2016
不,到 .我想保持对同一集合的相同引用。我想改变该集合,而不是替换对新集合的引用。valvar
0赞 Alec 7/23/2016
我的错。完全正确。A 到可变集。菜鸟错误。val

答:

2赞 Chris Shain 7/23/2016 #1

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

例如:

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

因此,只需忽略返回的值即可。该集应就地更新。

评论

0赞 Travis Parks 7/23/2016
想象一下,我想取一个,以便原始文件不再包含另一个集合中的值。原始集合应缩小。我需要找到需要删除的元素,然后将它们从原始集合中移除。以后?diffSet-=
2赞 Chris Shain 7/23/2016
好吧,这不是你问的:-)您可以设置一系列项目,这些项目应该具有您想要的效果。 对于不在集合中的项目,应该没有影响。-=-=