【发布时间】:2016-07-22 17:39:49
【问题描述】:
我正在查看可变的Set 类并查看union、intersect、diff 等。所有这些集合操作都会创建一个新的Set。我很好奇是否有办法更新Set 而不是创建一个新的。否则,我必须从val 切换到var,否则我必须跟进其他步骤。
如果我不清楚,请考虑 .NET 的 HashSet 类。它具有修改集合的IntersectWith、ExceptWith 和UnionWith。而 LINQ 扩展方法 Intersect、Except 和 Union 创建新集合。我希望找到与“With”变体等效的东西。
这是一种从头开始重建集合的低效方法:
val temp = original.diff(other)
original.clear()
original ++= temp
显然,这样做会更有效率:
for (value <- other if original.contains(value)) {
original.remove(value)
}
【问题讨论】:
-
你的意思是切换
var到val可能吗? :) -
不,
val到var。我想保持对同一个集合的相同引用。我想改变该集合而不是替换对新集合的引用。 -
我的错。非常正确。一个
val到一个可变集合。菜鸟失误。
标签: scala collections set mutable