我有一个可变的scala Set:
master
当我表演时
git rebase --continue
结果为Set(0,2)
但是当我在循环或地图中执行相同的操作时:
val valueSet = scala.collection.mutable.Set[Int](0, 1, 2)
valueSet的内容保持:设置(0,1,2)。
我需要运行循环并根据某些条件从集合中删除元素,直到循环结束或Set变为空。我尝试在循环中打印valueSet并且它正常工作但是当循环结束时,valueSet返回到原始集。
使用不可变版本将严重影响代码的性能,这就是我使用可变版本的原因。
请帮忙!
编辑: 我正在使用spark-shell REPL。 (火花1.6.1)
我尝试了更多的东西,并想出如果我正在执行循环或映射和RDD,那么它不起作用。但对于非分布式的集合,它可行。我猜这与它在RDD上的转换函数并且不执行任何操作这一事实有关。但这只是我的猜测。
答案 0 :(得分:1)
它可以根据存在情况删除条目
val valueSet = scala.collection.mutable.Set[Int](0, 1, 2)
Range(0, 10).foreach(entry => valueSet -= entry)
println(valueSet.size) //size = 0
答案 1 :(得分:1)
也许是for
理解 - 因为我猜测你的实际谓词比仅从集合中移除值1
更复杂。它将返回1个新的可变Set,但不会为该范围内的每个值生成中间集。
scala> for {
| x <- valueSet
| if(x != 1) // or whatever
| } yield x
res1: scala.collection.mutable.Set[Int] = Set(0, 2)