Rumah >pembangunan bahagian belakang >Golang >Mengapa Potongan `s[lo:hi]` Go Mengecualikan Elemen `hi`-th?

Mengapa Potongan `s[lo:hi]` Go Mengecualikan Elemen `hi`-th?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-08 15:30:10260semak imbas

Why Does Go's `s[lo:hi]` Slice Exclude the `hi`-th Element?

Go Slice Element Indexing: Mengapa s[lo:hi] Berakhir pada Elemen hi-1

Dalam kepingan Go, ungkapan s [lo:hi] menilai kepada sekeping elemen dari kedudukan lo ke kedudukan hi-1. Ini mungkin kelihatan berlawanan dengan intuisi, kerana seseorang mungkin menjangkakan ia akan memasukkan elemen hi. Walau bagaimanapun, terdapat beberapa rasional reka bentuk di sebalik keputusan ini.

Satu kelebihan pendekatan ini adalah untuk aritmetik penunjuk. Dalam bahasa seperti C, tatasusunan diwakili sebagai penunjuk kepada elemen pertamanya. Menggunakan tatasusunan 0-indeks dan penghirisan inklusif-eksklusif memudahkan pengiraan alamat elemen, kerana alamat elemen i hanyalah penunjuk tatasusunan tambah i.

Kedua, skema pengindeksan ini membolehkan untuk mengekstrak kepingan asal dengan menentukan arr[0:len(arr)]. Ini berguna dalam senario seperti membaca data ke dalam kepingan dan kemudian mengekstrak kepingan yang tidak kosong tanpa operasi tambahan.

Akhir sekali, ia menghalang pertindihan indeks. Ini bermakna apabila membahagikan tatasusunan kepada sub-kepingan dengan indeks berturut-turut, kepingan itu meliputi keseluruhan tatasusunan itu sepenuhnya. Ini memudahkan operasi seperti membahagi tatasusunan berdasarkan integer bukan berturut-turut, seperti yang ditunjukkan dalam coretan kod di bawah:

func consecutiveSlices(ints []int) [][]int {
    ret := make([][]int, 0)
    i, j := 0, 1
    for j < len(ints) {
        if ints[j] != ints[j-1] + 1 {
            ret = append(ret, ints[i:j])
            i = j
        }
    }
    ret = append(ret, ints[i:j])
    return ret
}

Adakah lebih intuitif untuk s[lo:hi] memasukkan elemen hi? Ya, mungkin untuk pemula. Walau bagaimanapun, kelebihan tatasusunan 0-indeks dan penghirisan inklusif-eksklusif, termasuk aritmetik penuding dipermudah, pengekstrakan kepingan lancar dan indeks tidak bertindih, mengatasi faedah penghirisan inklusif-inklusif intuitif.

Atas ialah kandungan terperinci Mengapa Potongan `s[lo:hi]` Go Mengecualikan Elemen `hi`-th?. 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