So fügen Sie automatisch neue Elemente eines Slice zu einem Funktionsparameter hinzu, wenn das Slice wächst

王林
Freigeben: 2024-02-15 18:00:11
nach vorne
877 Leute haben es durchsucht

So fügen Sie automatisch neue Elemente eines Slice zu einem Funktionsparameter hinzu, wenn das Slice wächst

Der PHP-Editor Xiaoxin teilt eine praktische Technik, nämlich das automatische Hinzufügen neuer Elemente zu Funktionsparametern, wenn das Slice (Slice) wächst. Slices sind eine flexible Datenstruktur, können jedoch bei der Verwendung innerhalb von Funktionsparametern einige Herausforderungen mit sich bringen. In diesem Artikel wird eine prägnante Methode zum automatischen Hinzufügen neuer Elemente zu Funktionsparametern vorgestellt, wenn das Slice wächst, indem variable Parameter (Variadic Arguments) und der Spread-Operator (Spread Operator) verwendet werden. Diese Technik kann die Lesbarkeit und Wartbarkeit des Codes verbessern. Lassen Sie es uns gemeinsam lernen!

Frageninhalt

Gibt es eine Möglichkeit, dies zu automatisieren?

package main

import "fmt"

func main() {
    var a []string
    a = append(a, "this", "this2", "this3")
    increaseArguments(a)
    a = append(a, "this4")
    increaseArguments(a)

}

func increaseArguments(b []string) {
    // I want, when i add new element to slice i want this function act as this
    // fmt.Println(b[0],b[1], b[2], b[3])

    fmt.Println(b[0], b[1], b[2])

}
Nach dem Login kopieren

Gibt es eine Möglichkeit, b[3] automatisch als Argument zu fmt.println hinzuzufügen?

Lösung

Bitte beachten Sie Folgendes, wenn b 的类型为 []any,您可以将其作为 fmt.println():

fmt.println(b...)
Nach dem Login kopieren

Aber wegen b 的类型是 []string kannst du nicht.

Aber wenn man b 转换为 []any in Scheiben schneidet, funktioniert es. Sie können dies mit dieser Hilfsfunktion tun:

func convert[t any](x []t) []any {
    r := make([]any, len(x))
    for i, v := range x {
        r[i] = v
    }
    return r
}
Nach dem Login kopieren

Dann:

func increasearguments(b []string) {
    fmt.println(convert(b)...)
}
Nach dem Login kopieren

Dies wird ausgegeben (versuchen Sie es auf Go Playground):

this this2 this3
this this2 this3 this4
Nach dem Login kopieren

Hinweis: in convert() 中创建一个新切片不会使该解决方案变慢,因为显式传递值(如 fmt.println(b[0], b[1], b[2]) ) wird implizit ein Slice erstellt.

Verwandte Fragen anzeigen: Wie übergebe ich den Wert einer variadischen Funktion mit mehreren Rückgabewerten?

Das obige ist der detaillierte Inhalt vonSo fügen Sie automatisch neue Elemente eines Slice zu einem Funktionsparameter hinzu, wenn das Slice wächst. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage