[英]Use immutable.ListMap in place of mutable.LinkedHashMap
[英]Scala mutable.LinkedHashMap: for-loop remove strange behavior
我有一個mutable.LinkedHashMap並嘗試在for循環中刪除項目。 但是,如果發生刪除,for循環也會停止。
scala> val a = mutable.LinkedHashMap[Int, Int](1->1, 2->2, 3->3)
# when no remove occurs, for-loop works as expected
scala> for( (k,v) <- a ) { println(k); }
1
2
3
# following code doesn't work, only remove 1 and stop
scala> for( (k,v) <- a ) { println(k); a.remove(k) }
1
# following code work as expected
scala> a.keys.foreach{ k => println(k); a.remove(k) }
1
2
3
我很好奇為什么要刪除stop for-loop。
“在迭代中刪除”在“ 2.13.0-M5”中工作正常,但在較早版本中則不能。 但是仍然不建議您剪掉樹枝。
參見2.13示例: https : //scastie.scala-lang.org/prayagupd/Cq2wUKP3TtmaL5IDMVKRfw/7
import scala.collection.mutable
val data = mutable.LinkedHashMap[Int, Int](1 -> 1, 2 -> 2, 3 -> 3)
println("before: " + data)
for ((k, v) <- data) {
println("removing key: " + k + " from map " + data)
data.remove(k)
}
println("after: " + data)
輸出:
before: LinkedHashMap(1 -> 1, 2 -> 2, 3 -> 3)
removing key: 1 from map LinkedHashMap(1 -> 1, 2 -> 2, 3 -> 3)
removing key: 2 from map LinkedHashMap(2 -> 2, 3 -> 3)
removing key: 3 from map LinkedHashMap(3 -> 3)
after: LinkedHashMap()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.