go語言切片


go語言切片

go語言的數組的長度是固定的,所以在某些場景下數組存在着它的局限性

go語言切片的存在就解決了數組長度局限的問題,切片可以看做一個可以自動擴容的數組,但是它跟數組還是有着區別。

切片的聲明和舒適化

package main

import "fmt"

func main() {
	// 切片的聲明和初始化
	var slice1 []int
	fmt.Println(slice1) // []

	var slice2 = []int{1, 3}
	fmt.Println(slice2) // [1 3]

	// 基於數組來得到切片
	var list = [10]int{1, 2, 3, 4, 56, 7}
	slice3 := list[:5]
	fmt.Println(slice3) //[1 2 3 4 56]
}

切片和數組

go的切片頂層指向的是數組,切片只是數組的一種引用形式。當數組的值發生了改變,則指向該數組的切片對應的值也會發生改變。

直接修改切片的值,就是在修改切片的數組的對應的值

package main

import "fmt"

func main() {
	var list = [...]int{1, 3, 6, 8, 88}
	slice := list[2:4]
	fmt.Println(slice) // [6 8]
	slice[0] = 99
	fmt.Println(slice)  // [99 8]
	fmt.Println(list)   // [1 3 99 8 88]
}

切片的添加和刪除

雖然說切片是可以自動擴容的,但是直接使用超過切片長度的索引的對切片進行修改是不可行的,如

package main

import "fmt"

func main() {

	//

	slice := []int{1, 2, 3}
	slice[4] = 4
	fmt.Println(slice)

}

這里會在編譯的時候拋出index out of range的錯誤

為了能夠給切片添加元素,go內置了一個append函數

package main

import "fmt"

func main() {

	//

	slice := []int{1, 2, 3}
	slice1 := append(slice, 4)
	fmt.Println(slice1) // [1 2 3 4]
}

append會在原來的切片的最后面追加一個元素,並返回新的切片

go語言暫時沒有原生直接支持刪除切片的方法,但是可以利用append返回新的切片的特性來生成新的切片,新的切片和原先的切片相比較,就會達成刪除切片的目的

package main

import "fmt"

func main() {

	// 利用append來刪除切片中的元素
	slice := []int{1, 2, 3, 4, 5, 6, 7}

	slice2 := append(slice[:3], slice[4:]...)
	// slice[4:]... 相當於把slice索引為4和它后面的元素全部加入到切片中
	
	fmt.Println(slice2) // [1 2 3 4 5 7]
	


}

總結一下,切片刪除元素的表達式為: append(slice[:index], slice[index+1:]...) index 為原切片想要刪除的元素

切片的長度和容量

package main

import "fmt"

func main() {
	// 切片的長度和容量
	var slice1 = []int {1,2,3}
	fmt.Println(slice1) // [1 2 3 ]
	fmt.Printf("slice1的長度為%d,容量為%d\n", len(slice1), cap(slice1))
	// slice1的長度為3,容量為3

	var list = [5]int {1,2,3,4,5}
	slice2 := list[3:]
	fmt.Println(slice2) // [4 5]
	fmt.Printf("slice2的長度為%d,容量為%d\n", len(slice2), cap(slice2))
	// slice2的長度為2,容量為2

	slice3 := append(slice2,6,7,8)
	fmt.Println(slice3) // [1 2 3 6 7 8]
	fmt.Printf("slice3的長度為%d,容量為%d\n", len(slice3), cap(slice3))
	// slice3的長度為5,容量為6
}

切片的長度為切片本身的長度,切片的容量為切片第一個元素在底層數組到數組最后一個元素的長度


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM