826 Stimmen

Konkateniere zwei Slices in Go

Ich versuche, den Slice [1, 2] und den Slice [3, 4] zu kombinieren. Wie kann ich das in Go machen?

Ich habe es versucht:

append([]int{1,2}, []int{3,4})

aber ich habe folgende Fehlermeldung erhalten:

kann []int-Literal (Typ []int) nicht als Typ int in append verwenden

Allerdings scheint die Dokumentation anzudeuten, dass dies möglich ist. Was übersehe ich?

slice = append(slice, anotherSlice...)

9voto

ASHWIN RAJEEV Punkte 1963

Append( ) Funktion und Spread Operator

Zwei Slices können mit der append Methode in der Standard-Golang-Bibliothek konkateniert werden. Diese ist ähnlich der variadic Funktionsoperation. Daher müssen wir ... verwenden.

package main

import (
    "fmt"
)

func main() {
    x := []int{1, 2, 3}
    y := []int{4, 5, 6}
    z := append([]int{}, append(x, y...)...)
    fmt.Println(z)
}

Die Ausgabe des obigen Codes ist: [1 2 3 4 5 6]

7voto

Um zwei Slices zusammenzuführen,

func main() {
    s1 := []int{1, 2, 3}
    s2 := []int{99, 100}
    s1 = append(s1, s2...)

    fmt.Println(s1) // [1 2 3 99 100]
}

Um einen einzelnen Wert an ein Slice anzuhängen

func main() {
    s1 :=  []int{1,2,3}
    s1 := append(s1, 4)

    fmt.Println(s1) // [1 2 3 4]
}

Um mehrere Werte an ein Slice anzuhängen

func main() {
    s1 :=  []int{1,2,3}
    s1 = append(s1, 4, 5)

    fmt.Println(s1) // [1 2 3 4]
}

5voto

PeterM Punkte 1992

Scheint wie eine perfekte Verwendung für Generics zu sein (bei Verwendung von 1.18 oder höher).

func concat[T any](first []T, second []T) []T {
    n := len(first);
    return append(first[:n:n], second...);
}

3voto

BaSO4 Punkte 71

append([]int{1,2}, []int{3,4}...) wird funktionieren. Argumente an ... Parameter übergeben.

Wenn f variadisch ist mit einem abschließenden Parameter p vom Typ ...T, dann ist innerhalb von f der Typ von p äquivalent zu Typ []T.

Wenn f ohne tatsächliche Argumente für p aufgerufen wird, ist der Wert, der an p übergeben wird, nil.

Andernfalls ist der übergebene Wert ein neuer Slice vom Typ []T mit einem neuen zugrunde liegenden Array, dessen aufeinanderfolgende Elemente die tatsächlichen Argumente sind, die alle auf T zuweisbar sein müssen. Die Länge und Kapazität des Slices ist daher die Anzahl der Argumente, die an p gebunden sind, und kann sich für jede Aufrufstelle unterscheiden.

Gegeben die Funktion und Aufrufe

func Greeting(prefix string, who ...string)
Greeting("niemand")
Greeting("hallo:", "Joe", "Anna", "Eileen")

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X