Rumah > Artikel > pembangunan bahagian belakang > Berapakah panjang dan kapasiti hirisan golang
Dalam golang, panjang kepingan ialah bilangan elemen dalam kepingan; elemen hirisan ke lapisan bawahnya Bilangan elemen pada penghujung tatasusunan. Panjang dan kapasiti kepingan boleh dikira Kaedah terbina dalam len() boleh mendapatkan panjang, dan cap() boleh memperoleh kapasiti dalam proses menggunakan kepingan, jika append() digunakan untuk membuat panjang hirisan lebih besar daripada kapasiti hirisan, maka hirisan Kapasiti akan diperbesarkan secara automatik dengan menggandakan.
Persekitaran pengendalian tutorial ini: sistem Windows 7, GO versi 1.18, komputer Dell G3.
Potongan bahasa Go mempunyai panjang dan kapasiti.
Panjang kepingan ialah bilangan elemen dalam kepingan
Kapasiti kepingan berada dalam tatasusunan asas bermula dari indeks di mana hirisan itu dicipta Bilangan elemen, mengira dari elemen pertama hingga akhir elemen tatasusunan asasnya.
Slices boleh diindeks, dan panjang boleh diperolehi dengan kaedah len() Slices menyediakan kaedah cap() untuk mengira kapasiti, yang boleh mengukur berapa lama kepingan boleh . Apabila kita menggunakan penghirisan, jika kita menggunakan tambah untuk menjadikan panjang hirisan lebih besar daripada kapasiti hirisan, kapasiti hirisan akan secara automatik dikembangkan dalam bentuk dua kali ganda.
Menghiris sebenarnya memperoleh bahagian tertentu tatasusunan, hirisan len<=hirisan topi<= tatasusunan len
Hasil cap() menentukan butiran pemintasan hirisan
var sTest01 []int func sliceTest01() { fmt.Printf("%T \n cap(sTest01) = %v \n", sTest01, cap(sTest01)) sTest01 = append(sTest01, 1, 2, 3, 4, 5, 6) fmt.Printf("%T \n cap(sTest01) = %v \n", sTest01, cap(sTest01)) }
Hasil larian:
[]int cap(sTest01) = 0 []int cap(sTest01) = 6
Dapat dilihat bahawa pada mulanya, panjang hirisan ialah 0, dan selepas menambah elemen, panjang sebenar ialah 6
Contoh yang membuktikan bahawa tatasusunan ialah jenis nilai dan kepingan ialah jenis rujukan:
func sliceTest02() { x := [...]int{1, 2, 3, 4, 5, 6} y := []int{100, 200, 300, 400} w := x z := y w[0] = 777 z[0] = 999 fmt.Println("x = ", x, "\nw = ", w) fmt.Println("y = ", y, "\nz = ", z) }
Hasil berjalan:
x = [1 2 3 4 5 6] w = [777 2 3 4 5 6] y = [999 200 300 400] z = [999 200 300 400]
Seperti yang anda boleh lihat daripada larian keputusan, Perubahan z mempengaruhi nilai y, menunjukkan bahawa hirisan adalah jenis rujukan.
slice tidak mempunyai sebarang data sendiri, ia hanyalah rujukan kepada tatasusunan asas, sebarang pengubahsuaian yang dibuat pada hirisan akan ditunjukkan dalam tatasusunan asas ialah jenis nilai, manakala hirisan ialah jenis rujukan
func sliceCap() { arr := [...]string{"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k"} fmt.Println("cap(arr) = ", cap(arr), arr) //截取数组,形成切片 s1 := arr[2:8] fmt.Printf("%T \n", s1) fmt.Println("cap(s1) = ", cap(s1), s1) //截取数组,形成切片 s2 := arr[4:7] fmt.Printf("%T \n", s2) fmt.Println("cap(s2) = ", cap(s2), s2) //截取数组,形成切片 s3 := s1[3:9] fmt.Printf("%T \n", s3) fmt.Println("cap(s3) = ", cap(s3), s3) //截取数组,形成切片 s4 := s2[4:7] fmt.Printf("%T \n", s4) fmt.Println("cap(s4) = ", cap(s4), s4) //证明切片是引用类型 s4[0] = "x" fmt.Println(arr, s1, s2, s3, s4) }
Hasil berjalan:
cap(arr) = 11 [a b c d e f g h i j k] []string cap(s1) = 9 [c d e f g h] []string cap(s2) = 7 [e f g] []string cap(s3) = 6 [f g h i j k] []string cap(s4) = 3 [i j k] [a b c d e f g h x j k] [c d e f g h] [e f g] [f g h x j k] [x j k]
Daripada keputusan kita dapat melihat bahawa pemintasan hirisan hanya boleh menjana hirisan Jika kandungan tidak dipintas cukup, nilai berikut akan menjadi diberikan daripada tatasusunan asas. Jika panjang tidak mencukupi, ralat akan dilaporkan.
Untuk menentukan sama ada kepingan kosong, adalah tidak tepat untuk menggunakan sifar secara langsung.
Golang membenarkan hirisan di mana len adalah 0 tetapi topi bukan 0, atau kedua-duanya adalah 0, jadi secara amnya panjang hirisan diperoleh oleh len untuk menentukan sama ada ia adalah kepingan kosong, bukannya secara langsung menjumlahkan kepingan dan nil melakukan perbandingan langsung.
[Cadangan berkaitan: Pergi tutorial video, Pengajaran pengaturcaraan]
Atas ialah kandungan terperinci Berapakah panjang dan kapasiti hirisan golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!