Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Menghiris Gosok dengan `s = s[2:]` Memberi Impak Kapasitinya Berbeza Daripada `s = s[:0]` atau `s = s[:4]`?

Bagaimanakah Menghiris Gosok dengan `s = s[2:]` Memberi Impak Kapasitinya Berbeza Daripada `s = s[:0]` atau `s = s[:4]`?

DDD
Lepaskan: 2024-12-01 17:35:11
asal
868 orang telah melayarinya

How Does Slicing a Go Slice with `s = s[2:]` Impact Its Capacity Differently Than `s = s[:0]` or `s = s[:4]`?

Penghirisan dan Pengurangan Kapasiti dalam Kepingan Go

Apabila anda bekerja dengan kepingan dalam Go, adalah penting untuk memahami kesan operasi penghirisan pada mereka kapasiti. Artikel ini membincangkan soalan khusus mengenai kesan yang berbeza-beza dari operasi penghirisan yang berbeza pada kapasiti hirisan.

Mari kita pertimbangkan coretan kod berikut:

package main

import "fmt"

func main() {
    s := []int{2, 3, 5, 7, 11, 13}
    printSlice(s)

    // Slice the slice to give it zero length.
    s = s[:0]
    printSlice(s)

    // Extend its length.
    s = s[:4]
    printSlice(s)

    // Drop its first two values.
    s = s[2:]
    printSlice(s)
}

func printSlice(s []int) {
    fmt.Printf("len=%d cap=%d %v\n", len(s), cap(s), s)
}
Salin selepas log masuk

Dalam kod ini, kita mempunyai kepingan integer s. Selepas mencetaknya pada mulanya, kami melakukan pelbagai operasi menghiris dan melihat kesannya pada panjang dan kapasiti kepingan.

Kapasiti Dikurangkan selepas 's = s[2:]'

Persoalan utama ialah mengapa garisan s = s[2:] mengurangkan kapasiti, tidak seperti s = s[:4] dan s = s[:0]. Perbezaannya terletak pada sintaks yang digunakan: [2:] mewakili penghirisan bermula dari indeks 2 hingga penghujung hirisan, dengan berkesan mengalih keluar dua elemen pertama.

Memori dan Menghiris

Slices merujuk a bahagian tatasusunan asas dalam ingatan. Apabila anda mengubah hirisan, anda mengubah suai penudingnya kepada tatasusunan.

Dalam kes s = s[2:], penuding hirisan bergerak ke hadapan, melangkau dua elemen pertama. Ini secara berkesan mengurangkan kapasiti hirisan kerana ia kini menghala ke bahagian yang lebih kecil daripada tatasusunan asas.

Bolehkah Kami Pulihkan Elemen Potong?

Malangnya, anda tidak boleh memulihkan dua elemen pertama yang dipotong menggunakan s = s[2:]. Ini kerana penuding hirisan telah bergerak ke hadapan dan data asal tidak lagi dirujuk.

Kesimpulan

Memahami gelagat operasi menghiris adalah penting apabila bekerja dengan kepingan Go. Sintaks penghirisan yang berbeza boleh mempunyai kesan yang berbeza-beza pada kapasiti, dan adalah penting untuk mengetahui implikasi ini untuk mengelakkan hasil yang tidak dijangka.

Atas ialah kandungan terperinci Bagaimanakah Menghiris Gosok dengan `s = s[2:]` Memberi Impak Kapasitinya Berbeza Daripada `s = s[:0]` atau `s = s[:4]`?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan