Czy w programie Go istnieje dowolna funkcja kopiowania jednej tablicy na drugą? Czy to działa w przypadku dwóch (lub więcej) tablic wymiarowych?Funkcja kopiowania tablic w języku Go
Odpowiedz
Czy istnieje funkcja wbudowana w języku Go do kopiowania jednej tablicy na drugą?
Tak: http://play.golang.org/p/_lYNw9SXN5
a := []string{
"hello",
"world",
}
b := []string{
"goodbye",
"world",
}
copy(a, b)
// a == []string{"goodbye", "world"}
Czy to zadziała w przypadku dwóch (lub więcej) tablic wymiarowych?
copy
zrobi płytką kopię wierszy: 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
nie sądzę, nie ma wbudowaną za to głęboko copys tablic wielowymiarowych: można to zrobić ręcznie jak: 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: jak wskazano w uwagach, że zakłada się przez „skopiować tablicę” masz na myśli „zrób głęboki kopię wycinka”, jak tablice mogą być głęboko kopiowane z =
operatora za odpowiedź jnml jest (bo tablice są typy wartości): http://play.golang.org/p/8EuFqXnqPB
wielkie dzięki. Pomogło to –
Masz odpowiedź na pytanie: "Czy w języku Go jest wbudowana funkcja kopiowania jednego plasterka na inny?" Które może być tym, co OP faktycznie chciał, ale powinieneś wyjaśnić różnicę między tablicami a plasterkami. –
Funkcja „” primary do kopiowania tablicę Przejdź jest assignment operator =, jak to jest w przypadku każdej innej wartości innego typu.
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)
}
wyjściowa:
[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]]
Zastosowanie 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. Leczenie tablic w Go
- 2. Lista tablic w języku Java
- 3. Sortowanie tablic asocjacyjnych w języku Python
- 4. Funkcja zwracająca tablicę kombinacji tablic
- 5. Wzorzec obserwatora w języku Go
- 6. co oznacza "./..." w "go zainstalować./..." w języku go?
- 7. Czy istnieje przenośny sposób kopiowania bloku pamięci w języku C#?
- 8. Obiekty głębokiego kopiowania w Angular
- 9. Próbka usługi kopiowania woluminów w tle (VSS) w języku C?
- 10. Funkcja najlepszego sortowania dla krótkich tablic
- 11. Funkcja wymazywania nazw w języku Python
- 12. Obsługa wyjątków w języku Google Go
- 13. pętli nad tablicy w Go języku
- 14. Jaki jest najlepszy sposób rekurencyjnego kopiowania zawartości w języku C#?
- 15. W języku Ruby, jak działa funkcja Coerce()?
- 16. Kulturowa funkcja ParseFloat w języku JavaScript?
- 17. kiedy funkcja zwraca odwołanie w języku C++
- 18. Funkcja pakietu Perla ("V") w języku Python?
- 19. Łączenie tablic tablic w Coffeescript
- 20. Notepad ++ Automatyczne wykrywanie tablic lub przestrzeni w języku Python
- 21. Jak wyeksportować listę tablic do pliku csv w języku Python?
- 22. Przekazywanie tablic jako parametrów metod w języku Java
- 23. Testowanie danych w języku C# przy użyciu tablic
- 24. Zaczynając indeks tablic w języku C# i VB.NET
- 25. Ogólna funkcja akceptująca & str lub przenoszenie Ciąg bez kopiowania
- 26. Go plaster tablicę z instrukcji return funkcja
- 27. Jak przetwarzać równoległe żądanie HTTP w języku programowania go?
- 28. Dlaczego funkcja boost :: equals wymaga zakresu do kopiowania?
- 29. Go: funkcja varariadic i zbyt wiele argumentów?
- 30. Inicjalizacja tablic C++ 11 z typem nie do kopiowania z jawnym konstruktorem
Pułapka: tablice i plasterki mogą wyglądać bardzo podobnie, zachowanie jest inne. Tablice są według wartości, wycinki według odniesienia (uproszczone). – Christian