Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah cara menukar kepingan Go kepada tatasusunan saiz tetap?

Bagaimanakah cara menukar kepingan Go kepada tatasusunan saiz tetap?

Susan Sarandon
Lepaskan: 2024-11-19 01:06:02
asal
1023 orang telah melayarinya

How do I convert a Go slice to a fixed-size array?

Menukar Kepingan kepada Tatasusunan Saiz Tetap

Ia adalah perkara biasa untuk menghadapi senario di mana anda perlu menukar hirisan kepada tatasusunan saiz tetap. Dalam Go, kepingan ialah struktur data dinamik yang boleh berkembang dan mengecut, manakala tatasusunan adalah saiz tetap dan mesti dimulakan dengan saiz tertentu.

Pertimbangkan kod berikut:

func gen(bricks []Brick) {
    if len(bricks) == 16 {
        if check(Sculpture{bricks}) {
            var b [16]Brick = bricks[0:16]; // Error: Cannot assign slice to array
        }
    }
}
Salin selepas log masuk

Dalam ini kod, kami cuba menukar kepingan bernama bata kepada tatasusunan saiz tetap b. Walau bagaimanapun, ini mengakibatkan ralat kerana kepingan dan tatasusunan mempunyai jenis yang berbeza.

Menggunakan salinan

Untuk menukar kepingan kepada tatasusunan saiz tetap, anda boleh menggunakan salinan fungsi. Fungsi salin menyalin elemen dari satu keping atau tatasusunan ke yang lain. Ia memerlukan dua argumen: kepingan destinasi atau tatasusunan dan kepingan sumber atau tatasusunan.

Contoh berikut menunjukkan cara menggunakan salinan untuk menukar kepingan kepada tatasusunan:

slice := []byte("abcdefgh")

var arr [4]byte

copy(arr[:], slice[:4])

fmt.Println(arr)
Salin selepas log masuk

Dalam ini contoh, fungsi salin menyalin empat bait pertama hirisan ke tatasusunan arr. Tatasusunan yang terhasil akan mengandungi nilai [97 98 99 100].

Menggunakan penukaran kepingan ke tatasusunan (Go 1.17 )

In Go versi 1.17 dan lebih tinggi, ciri baharu telah diperkenalkan untuk menyokong penukaran slice-to-array. Ini membolehkan anda untuk menetapkan secara langsung hirisan kepada penuding tatasusunan tanpa menggunakan fungsi salin.

Contoh berikut menunjukkan penggunaan penukaran kepingan kepada tatasusunan:

s := make([]byte, 2, 4)
s0 := (*[0]byte)(s)      // s0 != nil
s1 := (*[1]byte)(s[1:])  // &s1[0] == &s[1]
s2 := (*[2]byte)(s)      // &s2[0] == &s[0]
// s4 := (*[4]byte)(s)      // panics: len([4]byte) > len(s)
Salin selepas log masuk

Dalam contoh ini , kami mencipta kepingan s dan kemudian menggunakannya untuk memulakan tiga penunjuk tatasusunan: s0, s1 dan s2. s0 ialah penunjuk kepada tatasusunan panjang sifar, s1 ialah penuding kepada tatasusunan satu elemen dan s2 ialah penuding kepada tatasusunan dua elemen.

Perhatikan bahawa ciri ini hanya tersedia untuk kepingan yang disokong oleh tatasusunan asas. Jika kepingan itu tidak disokong oleh tatasusunan, anda masih perlu menggunakan fungsi salin untuk menukarnya kepada tatasusunan.

Atas ialah kandungan terperinci Bagaimanakah cara menukar kepingan Go kepada tatasusunan saiz tetap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan