golang 數(shù)組與切片【基礎(chǔ)操作】
package?main
import?"fmt"
func?main()?{
????var?team?=?[...]string{"hammer",?"soldier",?"mum"}
????fmt.Println(team)?//[hammer?soldier?mum]
????for?k,?v?:=?range?team?{
????????fmt.Println(k,?v)
????}
????//0?hammer
????//1?soldier
????//2?mum
????a?:=?2
????b?:=?28
????c?:=?a?+?b
????fmt.Println(c)?//?30
????var?build?[30]int
????for?i?:=?0;?i?30;?i++?{?//0?~?29
????????build[i]?=?i?+?1
????}
????//切片全部整體
????fmt.Println(build)
????//[1?2?3?4?5?6?7?8?9?10?11?12?13?14?15?16?17?18?19?20?21?22?23?24?25?26?27?28?29?30]
????fmt.Println(build[:])???????????//與切片本身等效
????fmt.Println(build[:len(build)])?//與切片本身等效
????fmt.Println(build[:30])?????????//與切片本身等效
????//部分
????fmt.Println(build[5:10])?//[6?7?8?9?10]
????fmt.Println(build[18:])??//[19?20?21?22?23?24?25?26?27?28?29?30]
????fmt.Println(build[:2])???//[1?2]
????fmt.Println(build[0:0])??//[]?空切片,一般用于切片復(fù)位
????fmt.Println(build[0:1])??//[1]
????fmt.Println(build[30:])??//[]
????var?numbers?[]int
????for?i?:=?0;?i?10;?i++?{
????????numbers?=?append(numbers,?i)
????????fmt.Printf("len:?%d?cap:%d?pointer:%p?\n",?len(numbers),?cap(numbers),?numbers)
????}
????/*
???????len:?1?cap:1?pointer:0xc000016400
???????len:?2?cap:2?pointer:0xc000016410
???????len:?3?cap:4?pointer:0xc000014120
???????len:?4?cap:4?pointer:0xc000014120
???????len:?5?cap:8?pointer:0xc00001a100
???????len:?6?cap:8?pointer:0xc00001a100
???????len:?7?cap:8?pointer:0xc00001a100
???????len:?8?cap:8?pointer:0xc00001a100
???????len:?9?cap:16?pointer:0xc000102080
???????len:?10?cap:16?pointer:0xc000102080
????*/
????//??切片復(fù)制
????//設(shè)置元素?cái)?shù)量
????const?count?=?10
????//預(yù)分配足夠多的元素切片
????srcData?:=?make([]int,?count)
????//將切片賦值
????for?i?:=?0;?i?????????srcData[i]?=?i
????}
????//引用切片數(shù)據(jù)
????refData?:=?srcData
????//預(yù)分配足夠多的元素切片
????copyData?:=?make([]int,?count)
????//將數(shù)據(jù)分配到新的切片空間copyData中
????copy(copyData,?srcData)
????fmt.Println(copyData,?refData)?//[0?1?2?3?4?5?6?7?8?9]?[0?1?2?3?4?5?6?7?8?9]
????//修改原始數(shù)據(jù)的第一個元素
????srcData[0]?=?999
????//打印復(fù)制切片的第一個和最后一個元素;復(fù)制數(shù)據(jù)不變,原始數(shù)據(jù)改變
????fmt.Println(copyData[0],?copyData[count-1],?copyData,?refData)
????//0?9?[0?1?2?3?4?5?6?7?8?9]?[999?1?2?3?4?5?6?7?8?9]
????copy(copyData,?srcData[4:6])
????fmt.Println(copyData,?refData,srcData)
????//[4?5?2?3?4?5?6?7?8?9]?[999?1?2?3?4?5?6?7?8?9][999?1?2?3?4?5?6?7?8?9]
????for?i?:=?0;?i?5;?i++?{
????????fmt.Printf("i=?%d??v=?%d?\n",i,copyData[i])//?4?5?2?3?4?%
????}
????//刪除元素
????seq:=[]string{"a","b","c","d","e","f"}
????//指定刪除位置
????delIndex:=2
????//查看刪除前和之后的元素
????fmt.Println(seq[:delIndex],seq[delIndex+1:])
//[a?b]?[d?e?f]
????//將刪除前后的元素連接起來
????seq=append(seq[:delIndex],seq[delIndex+1:]...)
????fmt.Println(seq)//??[a?b?d?e?f]
}
評論
圖片
表情
