scala.collection.mutable.TreeSetを使用していますが、-=
が呼び出されたときに要素を削除できない問題が発生しています。 (18,46)が除去されないことscala treesetが要素を削除できません
val discovered = new TreeSet[Position]()(Ordering by { position => estimation(position) })
//Position is defined as: type Position = (Int, Int)
discovered += start
var x = 0
while(!discovered.isEmpty){
val current = discovered.head
println(discovered)
discovered -= current
println(discovered)
x += 1
println(s"$x $current")
[...] //Code to process current and discover new positions
}
次の例を示し、:
マイコード。その時点まで、取り外しは完全に機能しました。私は完璧に動作する他のテストケースと、約100回の反復に達するまでこの問題が発生しないその他のケースがあります。 TreeSet
の不変実装でも同じ結果が得られました。出力の
パート:
TreeSet((22,42), (18,46), (21,44), (24,46), (22,47), (21,43), (21,47), (23,47), (24,47))
TreeSet((18,46), (21,44), (24,46), (22,47), (21,43), (21,47), (23,47), (24,47))
14 (22,42)
TreeSet((18,46), (21,44), (22,41), (24,46), (22,47), (21,43), (21,47), (23,47), (24,47))
TreeSet((18,46), (21,44), (22,41), (24,46), (22,47), (21,43), (21,47), (23,47), (24,47))
15 (18,46)
TreeSet((18,46), (21,44), (22,41), (24,46), (22,47), (21,43), (21,47), (23,47), (24,47), (17,46))
TreeSet((18,46), (21,44), (22,41), (24,46), (22,47), (21,43), (21,47), (23,47), (24,47), (17,46))
16 (18,46)
推定(位置)はどのように定義されていますか?おそらく順序は堅牢ではないでしょうか? – Suma
'評価=新しいHashMap [Position、Float] .withDefaultValue(Float.PositiveInfinity)' 推定が変更されたときに '発見された'は常に更新されます: '推定(somePosition)= newScore; if(alreadyDiscovered){発見 - = somePosition} 発見+ = somePosition' – TheJP
これは変更可能なハッシュマップですか?それに値が入っていますか? – Suma