我使用Scala的2.9.1,當我嘗試這種代碼:scala中的mutable.Set.foreach的錯誤?
import scala.collection.mutable
val a = mutable.Set(1,2,3,4,7,0,98,9,8)
a.foreach(x => { println(x); a.remove(x) })
結果是像
0
98
2
1
4
3
8
其中沒有列出的所有元素。在此之後,a變成Set(9,7)而不是空集。它對我來說看起來很奇怪,是一個bug還是我們在做foreach時不能修改這個集合?
爲什麼downvote?我認爲這對於新來的迭代者以及它們是如何工作的人來說是一個非常有效的問題 –
我還沒有看到類似的東西,但是你可以用'a.flatMap(x => {println(x); if(cond )沒有其他Some(x)})'這將返回一個新的集合,刪除了None項。 – jcern
它不僅是一個有效的問題,它重複http://stackoverflow.com/questions/2803085/iterators-for-mutable-collections-in-scala和http://stackoverflow.com/questions/4417994/scala-remove -in-place-all-elements-of-listbuffer-that-meet-a-condition和http://stackoverflow.com/questions/2500548/what-is-the-proper-way-to-remove-elements -from-a-scala-mutable-map-using-a-predi –