Rumah > pembangunan bahagian belakang > Golang > Mari bercakap tentang kepingan dalam bahasa Go

Mari bercakap tentang kepingan dalam bahasa Go

青灯夜游
Lepaskan: 2022-07-07 20:43:00
ke hadapan
2352 orang telah melayarinya

Artikel ini akan memperkenalkan anda kepada "tatasusunan" yang boleh ubah - hirisan dalam golang Saya harap ia akan membantu anda!

Mari bercakap tentang kepingan dalam bahasa Go

hirisan golang (hirisan)

(1) Definisi hirisan

Kepingan ialah jujukan unsur-unsur yang sama panjangnya boleh ubah daripada jenis yang sama. Ia adalah lapisan enkapsulasi berdasarkan jenis tatasusunan. Ia sangat fleksibel dan menyokong pengembangan automatik.

Kepingan ialah jenis rujukan, dan struktur dalamannya mengandungi alamat, panjang dan kapasiti. Slices biasanya digunakan untuk beroperasi dengan cepat pada koleksi data. [Cadangan berkaitan: Go Video Tutorial]

Satu-satunya perbezaan antara membuat kepingan dan mencipta tatasusunan ialah sama ada terdapat nombor dalam "[]" sebelum Taip , ia bermaksud kepingan, jika tidak mewakili tatasusunan. Kerana kepingan mempunyai panjang berubah-ubah

var a []string  //声明一个字符串切片
var b = []int{1,2,3} //声明一个整数类型切片并初始化
var c = []bool{false,true} //声明一个bool类型并且初始化
Salin selepas log masuk

Malah, dalam situasi sebenar, ia sering difahami sebagai: kepingan adalah sebahagian daripada tatasusunan

num:=[3]int{0,1,2}
//:前后表示数组内部的索引
sc1:=num[:] //获取数组的全部
sc2:=num[0:2] //左闭右开,取到的是[0,1]
sc3:=num[1:] //取到的是[2]
sc4:=num[:1]  //取到的是[0]
Salin selepas log masuk

(2) Gunakan fungsi make mencipta hirisan

Ini mula sepadan dengan penyataan sebelumnya Kapasiti hirisan adalah berubah-ubah, yang boleh dicapai dengan fungsi buat Intipati hirisan adalah untuk merangkum tatasusunan asas Ia mengandungi tiga maklumat: penunjuk kepada tatasusunan asas, panjang hirisan (len), dan kapasiti hirisan (topi).

// make([]T, size, cap)
sc=make([]int,2,10)
fmt.Println(sc) // [0 0]
fmt.Println(len(sc)) // len表示切片存储元素的长度
fmt.Println(cap(sc)) // cap表示最大可以存储的容量
Salin selepas log masuk

(3) Slice traversal

sc:=[]int{1,2,3}
//普通for循环遍历
for i:=0;i<len(sc);i++{
	fmt.Println(s[i])
}
//for range遍历
for index,value:=range s{
	fmt.Println(index,value)
}
Salin selepas log masuk

(4) append() method

Fungsi terbina dalam bahasa Go append() boleh menambah elemen pada kepingan secara dinamik. Anda boleh menambah satu elemen pada satu masa, berbilang elemen atau elemen daripada kepingan lain (diikuti dengan...).

var s1 []int  //定义切片s1
s1 = append(s1,1)  //在切片s1后面添加一个1的元素
s1 = append(s1,2,3,4) //在切片s1后面继续添加2,3,4
s2:=[]int{5,6,7}  //定义切片s2
s1 = append(s1,s2) //把切片s2中的元素追加到切片s1中
Salin selepas log masuk

(5) kaedah salin

Fungsi copy() terbina dalam dalam bahasa Go boleh menyalin data satu kepingan ke ruang kepingan lain dengan cepat. , format penggunaan fungsi copy() adalah seperti berikut:

a:=[]int{1,2,3,4,5}
b:=make([]int,5,5)
copy(b,a) //把a切片中的元素copy到b切片中的元素
fmt.Println(b) //[1,2,3,4,5]
b[0]=1000
fmt.Println(b) // [1000,2,3,4,5]
Salin selepas log masuk

Ada masalah di sini yang memerlukan perhatian seperti itu dalam pembangunan sebenar

a := []int{1, 2, 3, 4, 5}
b := a
fmt.Println(a) //[1 2 3 4 5]
fmt.Println(b) //[1 2 3 4 5]
b[0] = 1000
fmt.Println(a) //[1000 2 3 4 5]
fmt.Println(b) //[1000 2 3 4 5]
/*
由于切片是引用类型,所以a和b其实都指向了同一块内存地址。
修改b的同时a的值也会发生变化。
*/
Salin selepas log masuk

(6 ) Pandai memadamkan elemen dalam kepingan

Tiada kaedah khas untuk memadamkan elemen slice dalam bahasa Go Kita boleh menggunakan ciri slice itu sendiri untuk memadamkan elemen. Kodnya adalah seperti berikut:

// 从切片中删除元素
a := []int{30, 31, 32, 33, 34, 35, 36, 37}
// 要删除索引为2的元素
a = append(a[:2], a[3:]...)
fmt.Println(a) //[30 31 33 34 35 36 37]
/*
总结一下就是:要从切片a中删除索引为index的元素,
操作方法是a = append(a[:index], a[index+1:]...)
*/
Salin selepas log masuk

Untuk lebih banyak pengetahuan berkaitan pengaturcaraan, sila lawati: Video Pengaturcaraan! !

Atas ialah kandungan terperinci Mari bercakap tentang kepingan dalam bahasa Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:csdn.net
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