Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah Menggugurkan Elemen daripada Go Slice Mempengaruhi Kapasitinya?

Bagaimanakah Menggugurkan Elemen daripada Go Slice Mempengaruhi Kapasitinya?

Linda Hamilton
Linda Hamiltonasal
2024-11-01 09:00:30597semak imbas

How Does Dropping Elements from a Go Slice Affect Its Capacity?

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!

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