Go Bahasa slice (slice)
slice Go Bahasa adalah array abstraksi.
Pergi panjang array tidak dapat diubah, sehingga koleksi tidak berguna dalam skenario tertentu, Go menyediakan fleksibel, kuat built-in bagian jenis ( "array dinamis"), dibandingkan dengan panjang array slice tidak tetap , elemen dapat ditambahkan ketika kapasitas tambahan meningkat dapat membuat irisan.
slice didefinisikan
Anda dapat mendeklarasikan array dari ukuran yang tidak ditentukan untuk menentukan potongan:
var identifier []type
Diiris panjang jelas.
Atau untuk membuat sepotong menggunakan membuat () fungsi:
var slice1 []type = make([]type, len) 也可以简写为 slice1 := make([]type, len)
Anda juga dapat menentukan kapasitas, di mana kapasitas adalah opsional.
make([]T, length, capacity)
Berikut len adalah panjang dari array dan juga panjang awal dari potongan.
slice inisialisasi
s :=[] int {1,2,3 }
bagian inisialisasi langsung [] merupakan jenis slice, {1,2,3} nilai inisialisasi diikuti oleh 1,2,3 cap-nya = len = 3
s := arr[:]
Inisialisasi slice s, adalah referensi ke arr array yang
s := arr[startIndex:endIndex]
Ini akan membuat slice baru untuk elemen pada indeks startIndex endIndex 1-under di arr
s := arr[startIndex:]
Elemen terakhir harus arr default ketika endIndex
s := arr[:endIndex]
Menunjukkan mulai dari elemen pertama dari arr waktu default startIndex
s1 := s[startIndex:endIndex]
Slice dengan irisan s initialize s1
s :=make([]int,len,cap)
Melalui built-in fungsi make () Menginisialisasi slice s, [] int mengidentifikasi unsur-unsur dari jenis irisan int
len () dan cap () fungsi
Slice diindeks dan dapat diperoleh dengan metode panjang len ().
Sepotong menyediakan metode untuk menghitung cap kapasitas () dapat diukur sampai jumlah maksimum iris.
Berikut ini contoh-contoh spesifik:
package main import "fmt" func main() { var numbers = make([]int,3,5) printSlice(numbers) } func printSlice(x []int){ fmt.Printf("len=%d cap=%d slice=%v\n",len(x),cap(x),x) }
Jalankan contoh di atas output:
len=3 cap=5 slice=[0 0 0]
Kosong (nihil) iris
Sepotong sebelum standar diinisiasi adalah nihil, panjang 0, contoh adalah sebagai berikut:
package main import "fmt" func main() { var numbers []int printSlice(numbers) if(numbers == nil){ fmt.Printf("切片是空的") } } func printSlice(x []int){ fmt.Printf("len=%d cap=%d slice=%v\n",len(x),cap(x),x) }
Jalankan contoh di atas output:
len=0 cap=0 slice=[] 切片是空的
slice intersepsi
Anda dapat mengatur mencegat slice [rendah-terikat: batas atas ] dengan menetapkan bawah dan atas, contoh adalah sebagai berikut:
package main import "fmt" func main() { /* 创建切片 */ numbers := []int{0,1,2,3,4,5,6,7,8} printSlice(numbers) /* 打印原始切片 */ fmt.Println("numbers ==", numbers) /* 打印子切片从索引1(包含) 到索引4(不包含)*/ fmt.Println("numbers[1:4] ==", numbers[1:4]) /* 默认下限为 0*/ fmt.Println("numbers[:3] ==", numbers[:3]) /* 默认上限为 len(s)*/ fmt.Println("numbers[4:] ==", numbers[4:]) numbers1 := make([]int,0,5) printSlice(numbers1) /* 打印子切片从索引 0(包含) 到索引 2(不包含) */ number2 := numbers[:2] printSlice(number2) /* 打印子切片从索引 2(包含) 到索引 5(不包含) */ number3 := numbers[2:5] printSlice(number3) } func printSlice(x []int){ fmt.Printf("len=%d cap=%d slice=%v\n",len(x),cap(x),x) }
Mengeksekusi hasil kode output di atas:
len=9 cap=9 slice=[0 1 2 3 4 5 6 7 8] numbers == [0 1 2 3 4 5 6 7 8] numbers[1:4] == [1 2 3] numbers[:3] == [0 1 2] numbers[4:] == [4 5 6 7 8] len=0 cap=5 slice=[] len=2 cap=9 slice=[0 1] len=3 cap=7 slice=[2 3 4]
append () dan copy () function
Jika Anda ingin meningkatkan kapasitas slice, kita harus membuat slice baru dan lebih besar dari fragmen asli konten tersebut disalin.
Kode berikut menggambarkan copy dari slice dan metode copy untuk menambahkan elemen baru untuk menambahkan metode slice.
package main import "fmt" func main() { var numbers []int printSlice(numbers) /* 允许追加空切片 */ numbers = append(numbers, 0) printSlice(numbers) /* 向切片添加一个元素 */ numbers = append(numbers, 1) printSlice(numbers) /* 同时添加多个元素 */ numbers = append(numbers, 2,3,4) printSlice(numbers) /* 创建切片 numbers1 是之前切片的两倍容量*/ numbers1 := make([]int, len(numbers), (cap(numbers))*2) /* 拷贝 numbers 的内容到 numbers1 */ copy(numbers1,numbers) printSlice(numbers1) } func printSlice(x []int){ fmt.Printf("len=%d cap=%d slice=%v\n",len(x),cap(x),x) }
output kode di atas dijalankan:
len=0 cap=0 slice=[] len=1 cap=2 slice=[0] len=2 cap=2 slice=[0 1] len=5 cap=8 slice=[0 1 2 3 4] len=5 cap=16 slice=[0 1 2 3 4]