Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cara untuk menambah elemen baharu kepingan secara automatik pada parameter fungsi apabila kepingan itu berkembang

Cara untuk menambah elemen baharu kepingan secara automatik pada parameter fungsi apabila kepingan itu berkembang

王林
王林ke hadapan
2024-02-15 18:00:11816semak imbas

Cara untuk menambah elemen baharu kepingan secara automatik pada parameter fungsi apabila kepingan itu berkembang

Editor PHP Xiaoxin berkongsi teknik praktikal, iaitu cara menambah elemen baharu secara automatik kepada parameter berfungsi apabila kepingan (Slice) berkembang. Slices ialah struktur data yang fleksibel, tetapi boleh memberikan beberapa cabaran apabila digunakan dalam parameter fungsi. Artikel ini akan memperkenalkan kaedah ringkas untuk menambah elemen baharu secara automatik kepada parameter berfungsi apabila hirisan berkembang dengan menggunakan parameter pembolehubah (Argumen Variadik) dan operator penyebaran (Pengendali Spread). Teknik ini boleh meningkatkan kebolehbacaan dan kebolehselenggaraan kod. Mari belajar bersama-sama!

Kandungan soalan

Adakah terdapat cara untuk mengautomasikan ini?

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

}

Adakah terdapat cara untuk menambah b[3] secara automatik sebagai hujah kepada fmt.println?

Penyelesaian

Sila ambil perhatian bahawa jika b 的类型为 []any,您可以将其作为 fmt.println():

fmt.println(b...)

Tetapi kerana b 的类型是 []string, anda tidak boleh.

Tetapi jika anda menghiris b 转换为 []any, ia berkesan. Anda boleh melakukan ini menggunakan fungsi pembantu ini:

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

Kemudian:

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

Ini akan menghasilkan (cuba di pergi taman permainan):

this this2 this3
this this2 this3 this4

Nota: dalam convert() 中创建一个新切片不会使该解决方案变慢,因为显式传递值(如 fmt.println(b[0], b[1], b[2]) ) secara tersirat mencipta kepingan.

Lihat soalan berkaitan: Bagaimana untuk menghantar nilai fungsi variadik dengan berbilang nilai pulangan?

Atas ialah kandungan terperinci Cara untuk menambah elemen baharu kepingan secara automatik pada parameter fungsi apabila kepingan itu berkembang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam