Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa Menggugurkan Elemen Slice pada Permulaan Mengurangkan Kapasiti?

Mengapa Menggugurkan Elemen Slice pada Permulaan Mengurangkan Kapasiti?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-05 10:38:02216semak imbas

Why Does Dropping Slice Elements at the Beginning Reduce Capacity?

Go Tour #11: Memahami Perubahan Kapasiti Slice

A Tour of Go menunjukkan gelagat hirisan, di mana sekeping integer dimulakan dan diubah suai melalui satu siri operasi. Satu pemerhatian yang membingungkan dalam demonstrasi ialah pengurangan kapasiti hirisan selepas menjatuhkan dua elemen pertama dalam baris terakhir.

Punca Perubahan Kapasiti

Slice disokong oleh tatasusunan, dan menjatuhkan elemen pada permulaan hirisan secara berkesan menggerakkan titik permulaan hirisan dalam tatasusunan. Ini mengurangkan bilangan elemen antara permulaan hirisan dan penghujung tatasusunan, menghasilkan kapasiti yang lebih kecil.

Bukan Kesan Menggugurkan Elemen di Penghujung

Menggugurkan elemen pada penghujung kepingan tidak tidak menjejaskan kapasitinya kerana ia tidak mengubah jarak antara permulaan kepingan dan hujung tatasusunan. Potongan masih menempati julat slot yang sama dalam tatasusunan sandaran.

Susun Sandaran Kekal Tidak Diubahsuai

Perlu ambil perhatian bahawa operasi ini mengubah suai hirisan itu sendiri, bukan tatasusunan sandaran. Tatasusunan kekal tidak berubah sepanjang proses.

Penjelasan Terperinci dengan Pencetakan Dipertingkat

Dengan mencetak pengepala hirisan, kita boleh melihat perubahan dengan lebih jelas:

<code class="go">func printSlice(s []int) {
    sh := (*reflect.SliceHeader)(unsafe.Pointer(&s))
    fmt.Printf("header=%+v len=%d cap=%d %v\n", sh, len(s), cap(s), s)
}</code>

Keluaran menunjukkan cara penunjuk data bergerak apabila elemen digugurkan dari permulaan atau penghujung kepingan:

header=&{Data:272990208 Len:6 Cap:6} len=6 cap=6 [2 3 5 7 11 13]
header=&{Data:272990208 Len:0 Cap:6} len=0 cap=6 []
header=&{Data:272990208 Len:4 Cap:6} len=4 cap=6 [2 3 5 7]
header=&{Data:272990216 Len:2 Cap:4} len=2 cap=4 [5 7]

Atas ialah kandungan terperinci Mengapa Menggugurkan Elemen Slice pada Permulaan Mengurangkan Kapasiti?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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