Maison >développement back-end >Golang >Comment ajouter automatiquement de nouveaux éléments d'une tranche à un paramètre de fonction à mesure que la tranche grandit

Comment ajouter automatiquement de nouveaux éléments d'une tranche à un paramètre de fonction à mesure que la tranche grandit

王林
王林avant
2024-02-15 18:00:11889parcourir

Comment ajouter automatiquement de nouveaux éléments dune tranche à un paramètre de fonction à mesure que la tranche grandit

L'éditeur PHP Xiaoxin partage une technique pratique, c'est-à-dire comment ajouter automatiquement de nouveaux éléments aux paramètres de fonction lorsque la tranche (Slice) grandit. Les tranches sont une structure de données flexible, mais peuvent présenter certains défis lorsqu'elles sont utilisées dans les paramètres de fonction. Cet article présentera une méthode concise pour ajouter automatiquement de nouveaux éléments aux paramètres de fonction à mesure que la tranche grandit en utilisant des paramètres variables (Arguments Variadiques) et l'opérateur de propagation (Opérateur Spread). Cette technique peut améliorer la lisibilité et la maintenabilité du code. Apprenons-le ensemble !

Contenu de la question

Y a-t-il un moyen d'automatiser cela ?

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

}

Existe-t-il un moyen d'ajouter automatiquement b[3] comme argument à fmt.println ?

Solution

Veuillez noter que si b 的类型为 []any,您可以将其作为 fmt.println() :

fmt.println(b...)

Mais à cause de b 的类型是 []string, tu ne peux pas.

Mais si vous tranchez b 转换为 []any, ça marche. Vous pouvez le faire en utilisant cette fonction d'assistance :

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

Puis :

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

Cela affichera (essayez-le sur go terrain de jeu) :

this this2 this3
this this2 this3 this4

Remarque : dans convert() 中创建一个新切片不会使该解决方案变慢,因为显式传递值(如 fmt.println(b[0], b[1], b[2]) ) crée implicitement une tranche.

Voir les questions associées : Comment transmettre la valeur d'une fonction variadique avec plusieurs valeurs de retour ?

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer