go 語言切片是對陣列的抽象。
go 陣列的長度不可改變,在特定場景中這樣的集合就不太適用,go中提供了一種靈活,功能強悍的內建型別切片("動態陣列"),與陣列相比切片的長度是不固定的,可以追加元素,在追加時可能使切片的容量增大。
宣告切片型別的基本語法如下:
var 切片名稱 元素型別
示例:
nil表示空,也就是陣列初始化的預設值就是nilpackage main
import "fmt"
func main()
fmt.println(slice) //[1 2 3]
fmt.println(slice) //[1 2 3 4]
}
當宣告乙個變數,但卻還沒有賦值時,golang中會自動給你定義的變數賦乙個預設值,每種型別對應的預設值如下:
切片的遍歷和陣列是一樣的
由於切片的底層就是乙個陣列,所以我們可以直接基於陣列來定義切片package main
import "fmt"
func main()
fmt.println(slice) //[1 2 3]
fmt.println(slice) //[1 2 3 4]
for i := 0; i < len(slice); i++
for index, value := range slice
}
切片的長度和容量切片擁有自己的長度和容量,我們可以通過使用內建的 len() 函式求長度,使用內建的 cap() 函式求切片的容量//基於陣列定義切片
a := [5]int
fmt.println(a)
//獲取陣列所有值
b := a[:]
fmt.println(b)
//從陣列獲取指定的切片
c := a[1:4]
fmt.println(c)
//獲取下標3之前的資料(不包括3)
d := a[:3]
fmt.println(d)
//獲取下標3之後的資料(包括三)
e := a[3:]
fmt.println(e)
//[11 12 13 14 15]
//[11 12 13 14 15]
//[12 13 14]
//[11 12 13]
//[14 15]
切片的長度就是它所包含的元素個數
切片的容量是從他的第乙個元素開始數,到其底層陣列元素末尾的個數
切片的本質就是對底層陣列的封裝,它包含了三個資訊// 長度和容量
s := int
fmt.printf("長度%d 容量%d\n", len(s), cap(s))
ss := s[2:]
fmt.printf("長度%d 容量%d\n", len(ss), cap(ss))
sss := s[2:4]
fmt.printf("長度%d 容量%d\n", len(sss), cap(sss))
舉個例子,現在有乙個陣列 a := [8]int ,切片 s1 := a[:5],相應示意圖如下
我們上面都是基於陣列來建立切片的,如果需要動態的建立乙個切片,我們就需要使用內建的make函式,格式如下:
make (元素型別, 切片數量,切片容量 )
舉例:
// make()函式建立切片
var slices = make(int, 4, 8)
//[0 0 0 0]
fmt.println(slices)
// 長度:4, 容量8
fmt.printf("長度:%d, 容量%d", len(slices), cap(slices))
切片還可以將兩個切片進行合併slices2 := int
fmt.println(slices2)
// 輸出結果 [1 2 3 4 5]
前面我們知道,切片就是引用資料型別slices2 := int
fmt.println(slices2)
// 輸出結果 [1 2 3 4 5]
slices3 := int
fmt.println(slices2) // 輸出結果[1 2 3 4 5 6 7 8]
如果我們需要改變切片的值,同時又不想影響到原來的切片,那麼久需要用到copy函式
go語言中並沒有刪除切片元素的專用方法,我們可以利用切片本身的特性來刪除元素。**如下slices4 := int
var slice5 = make(int,4,8)
copy(slice5,slices4)
slice5[0] = 4
fmt.println(slices4) //輸出結果[1 2 3 4]
fmt.println(slice5)//輸出結果[4 2 3 4]
氣泡排序演算法// 刪除切片中的值
var slices6 = int
// 刪除下標為1的值
fmt.println(slices6)
選擇排序func main()
for i := 0; i < len(numslice); i++
} if !flag
} fmt.println(numslice)
}
對於int、float64 和 string陣列或是切片的排序,go分別提供了sort.ints()、sort.float64s() 和 sort.strings()函式,預設都是從小到大進行排序// 編寫選擇排序
var numslice2 = int
for i := 0; i < len(numslice2); i++
}}fmt.println(numslice2)
golang的sort包可以使用 sort.reverse(slic e) 來調換slice.inte***ce.less,也就是比較函式,所以int、float64 和 string的逆序排序函式可以這樣寫var numslice2 = int
sort.ints(numslice2)
fmt.println(numslice2)
// 逆序排列
var numslice4 = int
sort.sort(sort.reverse(sort.intslice(numslice4)))
fmt.println(numslice4)
2020 10 15Go語言陣列
陣列是具有相同唯一型別的一組已編號,且長度固定的資料項序列。這種型別可以使任意的原始型別例如 int float string以及自定義型別等等。golang中陣列的另乙個特點是占用記憶體的連續性,也就是說陣列中的元素是被分配進乙個連續的記憶體位址中,因此通過索引獲取陣列元素的速度會非常快。和陣列相...
2020 10 15Go語言之函式
函式是組織好的 可重複使用 用於執行指定任務的基本 塊 go語言支援 函式 匿名函式和閉包 go語言中定義函式使用 func 關鍵字,具體格式如下 func 函式名 引數 返回值型別 package main import fmt func main 單返回值 計算 a b func sum a i...
Go語言切片
go語言切片 go語言切片是對陣列的抽象 go 陣列的長度不可改變,在特定場景中這樣的集合就不太適用,go中提供了一種靈活,功能強悍的內建型別切片 動態陣列 與陣列相比切片的長度是不固定的,可以追加元素,在追加時可能使切片的容量增大。宣告乙個未指定大小的陣列來定義切片 var identifier ...