Gibt es in Go eine integrierte Funktion zum Kopieren eines Arrays in ein anderes? Funktioniert das bei zwei (oder mehr) dimensionalen Arrays?Funktion zum Kopieren von Arrays in Go-Sprache
Antwort
Gibt es in der Go-Sprache eine eingebaute Funktion zum Kopieren eines Arrays in ein anderes?
Ja: http://play.golang.org/p/_lYNw9SXN5
a := []string{
"hello",
"world",
}
b := []string{
"goodbye",
"world",
}
copy(a, b)
// a == []string{"goodbye", "world"}
Wird diese Arbeit im Fall von zwei (oder mehr) dimensionale Arrays?
copy
wird eine flache Kopie der Zeilen tun: http://play.golang.org/p/0gPk6P1VWh
a := make([][]string, 10)
b := make([][]string, 10)
for i := range b {
b[i] = make([]string, 10)
for j := range b[i] {
b[i][j] = strconv.Itoa(i + j)
}
}
copy(a, b)
// a and b look the same
b[1] = []string{"some", "new", "data"}
// b's second row is different; a still looks the same
b[0][0] = "apple"
// now a looks different
Das glaube ich nicht, dass es eine eingebaute in dafür tief copys von mehrdimensionalen Arrays: Sie können es tun manuell wie: http://play.golang.org/p/nlVJq-ehzC
a := make([][]string, 10)
b := make([][]string, 10)
for i := range b {
b[i] = make([]string, 10)
for j := range b[i] {
b[i][j] = strconv.Itoa(i + j)
}
}
// manual deep copy
for i := range b {
a[i] = make([]string, len(b[i]))
copy(a[i], b[i])
}
b[0][0] = "apple"
// a still looks the same
edit: wie in den Kommentaren darauf hingewiesen, nahm ich durch „einen Array kopieren“ Sie bedeuten „eine tiefe Kopie einer Scheibe tun“, wie Arrays kann mit den 0.123.665 tief kopiert werdenOperator gemäß jnml Antwort (weil Arrays sind Werttypen): http://play.golang.org/p/8EuFqXnqPB
vielen Dank. Es half –
Sie haben die Frage beantwortet: "Gibt es eine eingebaute Funktion in Go-Sprache für das Kopieren einer Scheibe in eine andere?" Was vielleicht das war, was das OP eigentlich wollte, aber Sie sollten den Unterschied zwischen Arrays und Slices erklären. –
Die primäre „Funktion“ für das Kopieren eines Arrays in Go ist der assignment operator =, wie es der Fall für einen anderen Wert von einer anderen Art ist.
package main
import "fmt"
func main() {
var a, b [4]int
a[2] = 42
b = a
fmt.Println(a, b)
// 2D array
var c, d [3][5]int
c[1][2] = 314
d = c
fmt.Println(c)
fmt.Println(d)
}
Ausgang:
[0 0 42 0] [0 0 42 0]
[[0 0 0 0 0] [0 0 314 0 0] [0 0 0 0 0]]
[[0 0 0 0 0] [0 0 314 0 0] [0 0 0 0 0]]
@ErikAigner Beim Zuweisen eines Arrays wird das gesamte Array kopiert, als wäre es eine Struktur. Dies ist anders als in C. Um einen Array-Zeiger zu erstellen, müssen Sie die Adresse explizit mit '&' übernehmen. – galaktor
@ErikAigner Nein. Arrays sind * nicht * ein Zeiger oder ein Referenztyp in Go. – Jeremy
Verwenden copy
http://play.golang.org/p/t7P6IliMOK
a := []int{1, 2, 3}
var b [3]int
fmt.Println("A:", a)
fmt.Println("B:", b)
copy(b[:], a)
fmt.Println("A:", a)
fmt.Println("B2:", b)
b[1] = 9
fmt.Println("A:", a)
fmt.Println("B3:", b)
OUT:
A: [1 2 3]
B: [0 0 0]
A: [1 2 3]
B2: [1 2 3]
A: [1 2 3]
B3: [1 9 3]
- 1. Postgres-Funktion zum Einfügen von Arrays
- 2. Kopieren von 2D-Arrays in CUDA
- 3. Kopieren von 2D-Arrays in C
- 4. Arrays zum Filtern, Kopieren und Verarbeiten - schnelle Makro-Methode
- 5. Kopieren von zwei Arrays in ein größeres Array?
- 6. Empfangen Arrays von Arrays von ... in D-Funktion?
- 7. Funktion von Arrays von Strings in c
- 8. Fortschrittsbalken zum Kopieren von Dateien
- 9. Frage zum Kopieren von Eigenschaften in ViewModels
- 10. Stapelverarbeitung in Cassandra zum Kopieren von Tabellen;
- 11. AngularJS: Filter zum Teilen von Arrays in Arrays verwenden
- 12. Kopieren Sie 2 Arrays in ein neues.
- 13. Swift Funktion zum Parsen von JSON und zum Zurückgeben eines Arrays von Wörterbüchern
- 14. Rückgabe eines Arrays von Funktion in VBA
- 15. Übergeben von Arrays zur Funktion in C++
- 16. Kopieren/Einfügen-Funktion in Codeblocks
- 17. Herkömmliche Methode zum Kopieren von Dateien in Gradle - Kopieren oder Kopieren?
- 18. Verwendung von CodeVariableDeclaraionStament zum Deklarieren von Arrays
- 19. Swift-Arrays vom Hintergrund in den Vordergrund kopieren
- 20. PHP-Funktion Differenzelement von beiden Arrays
- 21. Scala-Skript zum Kopieren von Dateien
- 22. SQL generische Methode zum Kopieren von Tabellenschema
- 23. Ziel zum Kopieren von Dateien machen
- 24. einfaches Puppetscript zum Kopieren von Dateien
- 25. Plattformunabhängiges Tool zum Kopieren von Text in die Zwischenablage
- 26. Löschen eines Arrays erstellt von einer Funktion
- 27. Kopieren Referenztyp von einem zum anderen C#
- 28. Generate Scripts zum Kopieren von Ansichten
- 29. CMIS Besuchermuster zum Kopieren von Ordnerstruktur Multithread?
- 30. Ist es besser, System.arraycopy (...) als eine for-Schleife zum Kopieren von Arrays zu verwenden?
Fallstricke: Arrays und Slices können sehr ähnlich aussehen, das Verhalten ist anders. Arrays sind nach Wert, Scheiben nach Referenz (vereinfacht). – Christian