Go Slices: Demystifying Capacity and Length
In Go, slices ialah struktur data yang berkuasa untuk bekerja dengan koleksi data. Dua konsep penting yang berkaitan dengan kepingan ialah kapasiti dan panjang, yang boleh mengelirukan untuk difahami pada mulanya.
Pertimbangkan contoh berikut:
func main() { a := make([]int, 5) // [0,0,0,0,0] len=5 cap=5 b := make([]int, 0, 5) // [] len=0 cap=5 c := b[:2] // [0,0] len=2 cap=5 d := c[2:5] // [0,0,0] len=3 cap=3 }
Kapasiti vs. Panjang
Dalam contoh ini, a mempunyai panjang 5 (bilangan unsur yang dikandungnya) dan kapasiti 5 (bilangan unsur ia boleh tahan sebelum pengagihan semula). b mempunyai panjang 0 dan kapasiti 5, menunjukkan bahawa ia pada mulanya tidak mengandungi unsur tetapi berpotensi berkembang untuk menampung sehingga 5 elemen.
Elemen Sifar
Apabila anda mencipta kepingan dengan make([]int, 0, 5) seperti dalam b, tatasusunan sandaran dibuat dan dimulakan dengan nilai sifar untuk elemennya. Ini bermakna walaupun b pada mulanya tidak mempunyai unsur, tatasusunan sandarannya mengandungi lima nilai sifar.
Apabila anda menghiris sekeping, anda sedang mencipta sekeping baharu yang berkongsi tatasusunan sandaran yang sama. Oleh itu, apabila anda menetapkan c := b[:2], anda mencipta kepingan baharu yang merujuk kepada dua elemen sifar pertama tatasusunan sokongan. Oleh itu, c mempunyai panjang 2 dan mengandungi nilai [0,0].
Kapasiti Kepingan Hiris
Apabila anda menghiris kepingan, kapasiti kepingan yang terhasil ditentukan oleh perbezaan antara indeks terakhir ungkapan kepingan dan indeks pertama. Dalam kes d := c[2:5], perbezaan ini ialah 3 (5 - 2). Oleh itu, d mempunyai kapasiti 3.
Kesimpulan
Memahami kapasiti dan panjang adalah penting untuk bekerja dengan berkesan dengan kepingan dalam Go. Ingat bahawa kepingan sentiasa merujuk tatasusunan sandaran, dan kapasiti mewakili saiz tatasusunan sandaran ini. Dengan menghiris kepingan, anda membuat kepingan baharu yang berkongsi tatasusunan sandaran yang sama dan mewarisi sifatnya, termasuk kapasitinya.
Atas ialah kandungan terperinci Go Slices: Apakah Perbezaan Antara Kapasiti dan Panjang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!