5.go slice, 切片与数组, map

来源:互联网 发布:mac修容粉 编辑:程序博客网 时间:2024/06/05 22:42
package mainimport "fmt"func main() {    //数组定义    var arr[5] int    arr[0] = 1    arr[1] = 2    fmt.Println(arr)    // 数组定义并初始化    var arr1 = [5]int {'a','b','c'}    fmt.Println(arr1)    //数组初始化    arr2 := [5]int {1,2,3,4,5}    fmt.Println(arr2)    //切片定义    var slice[] int    fmt.Println(slice)    //切片定义并初始化    var slice1[] int = make([]int, 3)    fmt.Println(slice1)    //切片初始化    slice2 := make([]int, 5)    fmt.Println(slice2)    slice3 := []int {1,2,4,5,6,7,8,9}    fmt.Println(slice3)//声明一个 100 个的切片    slice := []int {99:100}    fmt.Println(slice)    //声明空切片    var slice1[] int    fmt.Println(slice1)slice := []int {1,2,3,4,5}    slice[1] = 100    fmt.Println(slice)    newSlice := slice[1:3] //长度为2,容量为4    fmt.Println(newSlice) // printf 100 3}

长度与容量计算:
这里写图片描述

改变切片可能导致的结果:
这里写图片描述

package mainimport "fmt"func main() {    slice := []int {1,2,3,4,5}    slice[1] = 100    fmt.Println(slice) //[1 100 3 4 5]    newSlice := slice[1:3] //长度为2,容量为4    fmt.Println(newSlice) // [100 3]    newSlice[1] = 2000    fmt.Println(newSlice) //[100 2000]    fmt.Println(slice) //[1 100 2000 4 5]}

append() 函数:
这里写图片描述

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

append() 同时增加长度和容量:
这里写图片描述
这里写图片描述

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

使用3个索引创建切片:
这里写图片描述
这里写图片描述

设置长度和容量一样大:

source := []string {"Apple", "Orange", "Plum", "Banana", "Grape"}    fmt.Println(source)    slice := source[2:3:4]    fmt.Println(slice)    slice = append(slice, "Hello,World")    fmt.Println(source)    fmt.Println(slice)

这里写图片描述

如果没有第三个索引,或者 容量大于长度。会改变底层数组。

这里写图片描述

限制容量跟长度一样后,第一次调用 append() 会创建新的底层数组

这里写图片描述

迭代切片:

slice := []int {1,2,3,4}    for index, value := range slice {        fmt.Printf("Index %d, Value %d\n",index,value)    }

这里写图片描述

传统for :

slice := []int {1,2,3,4}    for index := 2; index < len(slice); index++ {        fmt.Printf("Index : %d, Value : %d\n",index,slice[index])    }

map :
这里写图片描述
这里写图片描述
这里写图片描述

// 初始化    colosr := map[string]string {}    colosr["red"] = "#111"    fmt.Println(colosr)    //判断映射是否存在    var colosr1 map[string]string    index,exists := colosr1["blue"]    if exists {        fmt.Println("yes")    } else {        fmt.Println(index)        fmt.Println("no")    }

delete() 函数 :

colors := map[string]string {        "Alibaba":"#111",        "Color":"#222",        "Dark":"#333",        "Fooo":"#444",    }    for index,value := range colors {        fmt.Println(index)        fmt.Println(value)    }    delete(colors,"Alibaba") // 删除切片    for index,value := range colors {        fmt.Println(index)        fmt.Println(value)    }
映射作为函数参数,传递的是引用package mainimport "fmt"func main() {    colors := map[string]string {        "Alibaba":"#1111",        "Bbbbb":"#2222",        "Ccccc":"#3333",        "Ddddd":"#4444",    }    for index,value := range colors {        fmt.Println(index)        fmt.Println(value)    }    removeColor(colors, "Alibaba")    fmt.Println("----------------------")    for index,value := range colors {        fmt.Println(index)        fmt.Println(value)    }}func removeColor(colors map[string]string, key string) {    delete(colors, key)}

https://segmentfault.com/a/1190000005812839?utm_source=tuicool&utm_medium=referral

http://www.jb51.net/article/56828.htm

原创粉丝点击