Heim  >  Artikel  >  Backend-Entwicklung  >  So fügen Sie automatisch neue Elemente eines Slice zu einem Funktionsparameter hinzu, wenn das Slice wächst

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

王林
王林nach vorne
2024-02-15 18:00:11816Durchsuche

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])

}

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...)

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
}

Dann:

func increasearguments(b []string) {
    fmt.println(convert(b)...)
}

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

this this2 this3
this this2 this3 this4

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen