Ich habe ein var x
vom Typ ListBuffer[ListBuffer[Int]]
in dem ich das Klonieren der Funktion clone
und Einstellung auf einem anderen var y
verwenden, verwende ich dann die Funktion update
auf diese neuen var y
den Inhalt zu aktualisieren, aber wenn ich das überprüfen Original Inhalt von var x
es ist das gleiche wie var y
? Warum ist das? Was mache ich falsch? Ist das ein Workaround? Ich versuche, eine Kopie von ListBuffer zu erreichen, die ich ändern kann, ohne den ursprünglichen Inhalt des ursprünglichen ListBuffer zu ändern.Cloning ListBuffer unveränderliche Ausgabe Scala
2
A
Antwort
4
clone
macht nur eine flache Kopie, müssen Sie eine tiefe Kopie:
scala> import collection.mutable.ListBuffer
import collection.mutable.ListBuffer
scala> var a = ListBuffer(ListBuffer(1, 2), ListBuffer(3,4))
a: scala.collection.mutable.ListBuffer[scala.collection.mutable.ListBuffer[Int]] = ListBuffer(ListBuffer(1, 2), ListBuffer(3, 4))
scala> var b = a.clone
b: scala.collection.mutable.ListBuffer[scala.collection.mutable.ListBuffer[Int]] = ListBuffer(ListBuffer(1, 2), ListBuffer(3, 4))
scala> b(0)(0) = 100
scala> a
res1: scala.collection.mutable.ListBuffer[scala.collection.mutable.ListBuffer[Int]] = ListBuffer(ListBuffer(100, 2), ListBuffer(3, 4))
scala> b
res2: scala.collection.mutable.ListBuffer[scala.collection.mutable.ListBuffer[Int]] = ListBuffer(ListBuffer(100, 2), ListBuffer(3, 4))
scala> var c = a.clone.map(_.clone)
c: scala.collection.mutable.ListBuffer[scala.collection.mutable.ListBuffer[Int]] = ListBuffer(ListBuffer(100, 2), ListBuffer(3, 4))
scala> c(0)(0) = 1000
scala> c
res3: scala.collection.mutable.ListBuffer[scala.collection.mutable.ListBuffer[Int]] = ListBuffer(ListBuffer(1000, 2), ListBuffer(3, 4))
scala> a
res4: scala.collection.mutable.ListBuffer[scala.collection.mutable.ListBuffer[Int]] = ListBuffer(ListBuffer(100, 2), ListBuffer(3, 4))
Verwandte Themen
- 1. Scala ListBuffer (oder gleichwertig) shuffle
- 2. scala - füge ein Tupel zu listBuffer hinzu
- 3. Scala unveränderliche Klasse Vals Setter
- 4. Wie erstellt man einen verschachtelten ListBuffer n mal in Scala in einem anderen ListBuffer?
- 5. Scala - ListBuffer leert sich nach jedem Hinzufügen in Schleife
- 6. Scala ListBuffer verhindert das Risiko eines Stack-Überlaufs?
- 7. Scala 2.10: Konvertieren veränderbare Map of ListBuffer in schreibgeschützte Datenstruktur
- 8. QObject Cloning
- 9. Sort Tupel ListBuffer
- 10. ListBuffer mit Tupel anhängen
- 11. Wie man Scalas unveränderliche Sammlungen hält unveränderliche Objekte
- 12. Spark-SQL UDF scala unveränderliche Karte mit df.WithColumn Rückkehr()
- 13. Wie konvertiert man eine java.util.Collections.unmodifyableMap in eine unveränderliche Scala Map?
- 14. Scala Breeze zipValues Ausgabe
- 15. Scala: Haar Wavelet Transform
- 16. Cloning-Unterklassen in Java
- 17. Git - gitolite - Cloning
- 18. Cloning spezifischen Zweig
- 19. Cloning datepicker Objekte [JQuery]
- 20. Cloning Objekt mit Verschlüssen
- 21. Fast Disk Cloning
- 22. Cloning auf ubuntu lange
- 23. Cloning git-Repository Failure
- 24. Swifty JSON Cloning Error
- 25. Threejs Cloning Meshes Animation
- 26. Cloning-Iteratoren in Java
- 27. Vorteile von Java Cloning
- 28. Laravel Cloning Query String
- 29. Unveränderliche Klassen und Eigenschaften?
- 30. Unveränderliche Abfragen
Um eine tiefe Kopie zu erreichen, ist 'var c = a.clone.map (_ Klon.)' Auf ideale Art und Weise? –
Für einfache Dinge wie dies würde ich ja sagen, für etwas komplizierter oder tiefer könnte eine bessere Lösung (wie [this] (https://github.com/kostaskougios/cloning)?). –