go语言数组
package main
import "fmt"
func main() {
var arr1 [] int
//初始化
arr2 := [3]int {1,2,5}
//编译器来确定个数
arr3 := [...]int {2,3,4,6,7}
//二位数组
var grid[4][5] int
fmt.Println(arr1)
fmt.Println(arr2)
fmt.Println(arr3)
fmt.Println(grid)
//数组遍历方法1
fmt.Println("..........arr3:",arr3)
for i:=0 ; i<len(arr3);i++{
fmt.Println(arr3[i])
}
//数组遍历方法2
fmt.Println("..........arr3:",arr3)
for i,v := range arr3 {
fmt.Println(i, v)
}
//数组遍历方法3,省略变量
fmt.Println("..........arr3:",arr3)
for _,v := range arr3 {
fmt.Println(v)
}
//数组遍历方法3,省略变量
fmt.Println("..........arr3:",arr3)
for _,v := range arr3 {
fmt.Println(v)
}
}
函数调用数组的时候 [10]int 和[20]int是不同类型
调用func f (arr [10] int)会拷贝
数组
go语言一般不直接使用数组,而是使用切片
go语言切片
- 切片本身没有数据,切片是对底层数据的一个view
- 改变切面数据内容的值,底层数据的值也会改变
- slice可以嵌套多层使用
s := arr[2:6]
s = s[:3]
s = s[1:]
-
底层结构
[图片上传失败...(image-c0294c-1603718212405)]
[图片上传失败...(image-ea0069-1603718212405)] -
获取slice的长度和容量
fmt.Printf("s3=%v, len(s3)=%d, cap(s3)=%d",s3,len(s3),cap(s3))
- append可以在slice后面加数据
例子
package main
import (
"fmt"
)
func printSlice(s [] int) {
fmt.Printf("%v, len=%d,cap=%d\n",s, len(s),cap(s))
}
func main() {
//创建slcie
var s [] int //Zero value for slice is nil
for i:=0 ; i<100 ; i++ {
printSlice(s)
s = append(s, 2 * i + 1)
}
fmt.Println(s)
s1 := [] int {2,4,6,8}
printSlice(s1)
//使用内置函数创建slice
s2 := make([]int ,16)
s3 := make([]int ,16,20)
printSlice(s2)
printSlice(s3)
fmt.Println("copy slice")
// slice拷贝
copy(s2,s1)
fmt.Println(s2)
fmt.Println("delete element from slice ")
//删除掉第三个元素
s2 = append(s2[:3] ,s2[4:]...)
printSlice(s2)
//从头删除
font := s2[0]
s2 = s2[1:]
fmt.Println("font=",font)
printSlice(s2)
//从尾巴删除
tail := s2[len(s2)-1]
s2 = s2[:len(s2)-1]
fmt.Println("tail=",tail)
printSlice(s2)
}
网友评论