簡體   English   中英

Scala mutable.LinkedHashMap:for循環刪除奇怪的行為

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM