Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Menggugurkan Elemen daripada Go Slice Mempengaruhi Kapasitinya?
Kapasiti Kepingan Selepas Menggugurkan Item
Apabila bekerja dengan kepingan dalam Go, adalah penting untuk memahami bagaimana kapasitinya berubah berdasarkan jenis pengubahsuaian dibuat. Untuk menggambarkan ini, mari kita periksa coretan kod dan outputnya:
package main import "fmt" func main() { s := []int{2, 3, 5, 7, 11, 13} printSlice(s) // Drop its last two values s = s[:len(s)-2] 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) }
Output:
len=6 cap=6 [2 3 5 7 11 13] len=4 cap=6 [2 3 5 7] len=2 cap=4 [5 7]
Mengapa Kapasiti Berbeza Selepas Menggugurkan Item?
Perhatikan bahawa apabila kita menjatuhkan dua item terakhir daripada kepingan (s = s[:len(s)-2]), kapasiti kekal tidak berubah pada 6, sambil menjatuhkan dua item pertama (s = s[2:] ) mengurangkan kapasiti kepada 4.
Sebab perbezaan ini terletak pada cara hirisan dilaksanakan dalam Go. Slices pada asasnya adalah pandangan ke dalam tatasusunan asas. Menggugurkan dua nilai terakhir melaraskan panjang hirisan, iaitu bilangan elemen yang ditunjuk hirisan, tetapi ia tidak menjejaskan kapasiti, iaitu saiz tatasusunan asas.
Walau bagaimanapun, menjatuhkan dua yang pertama nilai menghasilkan tatasusunan asas baharu dicipta untuk memegang kepingan yang dikurangkan. Ini kerana elemen dalam tatasusunan asas yang asal dianjak ke bawah dua tempat untuk mengisi jurang dan tatasusunan baharu diperlukan untuk menampung elemen yang dialihkan.
Atas ialah kandungan terperinci Bagaimanakah Menggugurkan Elemen daripada Go Slice Mempengaruhi Kapasitinya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!