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

王林
Lepaskan: 2024-02-15 18:00:11
ke hadapan
878 orang telah melayarinya

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

}
Salin selepas log masuk

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...)
Salin selepas log masuk

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
}
Salin selepas log masuk

Kemudian:

func increasearguments(b []string) {
    fmt.println(convert(b)...)
}
Salin selepas log masuk

Ini akan menghasilkan (cuba di pergi taman permainan):

this this2 this3
this this2 this3 this4
Salin selepas log masuk

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!

Label berkaitan:
sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan