Rumah > pembangunan bahagian belakang > Golang > Berapakah panjang dan kapasiti hirisan golang

Berapakah panjang dan kapasiti hirisan golang

青灯夜游
Lepaskan: 2023-01-14 10:44:37
asal
2819 orang telah melayarinya

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.

Berapakah panjang dan kapasiti hirisan golang

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)) 
}
Salin selepas log masuk

Hasil larian:

[]int 
 cap(sTest01) = 0 
[]int 
 cap(sTest01) = 6
Salin selepas log masuk

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)
}
Salin selepas log masuk

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]
Salin selepas log masuk

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)
}
Salin selepas log masuk

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]
Salin selepas log masuk

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!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan