Rumah >pembangunan bahagian belakang >Golang >Bagaimana Menghiris Mempengaruhi Kapasiti Go Slice?

Bagaimana Menghiris Mempengaruhi Kapasiti Go Slice?

DDD
DDDasal
2024-12-17 08:22:24517semak imbas

How Does Slicing Affect Go Slice Capacity?

Memahami Pengurangan Kapasiti Slice

Slice Go ialah struktur data yang cekap yang menggunakan tatasusunan asas untuk storan. Ia diwakili oleh gabungan panjang dan kapasiti, di mana kapasiti menentukan bilangan maksimum elemen yang boleh disimpan oleh kepingan.

Perubahan Kapasiti Slice

Memanipulasi hirisan tin kadangkala menjejaskan kapasitinya:

  • s = s[:0] dan s = s[:4] biarkan kapasiti hirisan tidak berubah kerana mereka tidak mengubah suai penuding asas kepada tatasusunan.
  • s = s[2:] berkurangan kapasiti kepingan kerana ia menukar penunjuk kepada kepingan baharu dengan menjatuhkan dua yang pertama elemen.

Contoh

Pertimbangkan program Go berikut:

package main

import "fmt"

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

    s = s[:0]
    printSlice(s)

    s = s[:4]
    printSlice(s)

    s = s[2:]
    printSlice(s)
}

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

Menjalankan program ini menghasilkan:

len=6 cap=6 [2 3 5 7 11 13]
len=0 cap=6 []
len=4 cap=6 [2 3 5 7]
len=2 cap=4 [5 7]

Penjelasan

Pada mulanya, kepingan itu mempunyai panjang 6 dan kapasiti 6. Menukar panjangnya kepada 0 tidak mengubah suai penunjuk, jadi kapasiti kekal tidak berubah. Memanjangkan panjang kepada 4 juga mengekalkan kapasiti yang sama. Walau bagaimanapun, menghiris hirisan daripada elemen ke-2 dan seterusnya (s = s[2:]) menukar penunjuk, menghasilkan kepingan baharu dengan panjang 2 dan kapasiti 4.

Pemulihan Data

s = s[2:] mengeluarkan dua elemen pertama daripada kepingan. Jika anda perlu memulihkannya, anda perlu mencipta kepingan baharu yang menyertakannya sebelum melakukan operasi s = s[2:].

Perwakilan Memori bagi Slices

Memahami perwakilan memori kepingan adalah penting untuk memahami mengapa kapasiti s = s[2:] berkurangan:

  • Apabila hirisan dibuat, ia menunjuk kepada tatasusunan asas.
  • Menghiris kepingan tidak memperuntukkan tatasusunan baharu. Sebaliknya, ia mencipta nilai hirisan baharu dengan penuding berbeza kepada tatasusunan asal.
  • Menukar penuding secara berkesan menetapkan semula hirisan untuk menghala ke bahagian lain tatasusunan asas. Ini boleh menjejaskan kapasiti.

Atas ialah kandungan terperinci Bagaimana Menghiris Mempengaruhi Kapasiti Go Slice?. 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