1. 程式人生 > 實用技巧 >golang之切片

golang之切片

可以理解為動態陣列

不指定陣列長度

建立

// 使用 make 建立空的整型切片
myNum := make([]int, 0)
// 使用切片字面量建立空的整型切片
myNum := []int{}
slice := array[0,3,5]
//[low,high,max]
//low:起點
//high:終點   左閉右開
    //len = high - low  長度
    //cap: max - low 容量
a := []int{1,2,3,4,5}
s := [1:3:5]
結果:
    s = 1,2,3. 容量是5
// 建立一個整型切片
// 其長度和容量都是 5 個元素
slice := make([]int
, 5)
// 建立一個整型切片
// 使其長度大於容量
myNum := make([]int, 5, 3)

注意,Golang 不允許建立容量小於長度的切片,當建立的切片容量小於長度時會在編譯時刻報錯:

panic: runtime error: index out of range

切片擴容

// 建立一個長度和容量都是 4 的整型切片
myNum := []int{10, 20, 30, 40}
// 向切片追加一個新元素
// 將新元素賦值為 50
newNum := append(myNum, 50)

當這個 append 操作完成後,newSlice 擁有一個全新的底層陣列,這個陣列的容量是原來的兩倍:

函式 append() 會智慧地處理底層陣列的容量增長。在切片的容量小於 1000 個元素時,總是會成倍地增加容量。一旦元素個數超過 1000,容量的增長因子會設為 1.25,也就是會每次增加 25%的容量(隨著語言的演化,這種增長演算法可能會有所改變)。

遍歷切片

myNum := []int{10, 20, 30, 40, 50}
// 迭代每一個元素,並顯示其值
for index, value := range myNum {
    fmt.Printf("index: %d value: %d\n", index, value)
}

range 建立了每個元素的副本,而不是直接返回對該元素的引用。要想獲取每個元素的地址,可以使用切片變數和索引值:

還可以用for遍歷

切片拷貝

func copy(dst, src []Type) int
//它表示把切片 src 中的元素拷貝到切片 dst 中,返回值為拷貝成功的元素個數。如果 src 比 dst 長,就截斷;如果 src 比 dst 短,則只拷貝 src 那部分:
num1 := []int{10, 20, 30}
num2 := make([]int, 5)
count := copy(num2, num1)
fmt.Println(count)
fmt.Println(num2)


//結果:
    3   //表示拷貝成功的元素個數
[10 20 30 0 0]

切片排序

sort.Ints(a[:])

正在整理筆記,如有雷同,請告知,必新增~