• 数组,切片和字典


    1、数组(Array)

    数组是一个有相同数据类型的元素组成的固定长度的有序集合,如:var x [5]int,使用var定义的数组,默认值如果整型为0,浮点型为0.0,字符串为"",对象为nil。

    求整型数组之和,使用range函数,遍历数组、切片、字典时,返回索引和元素值;当对某个返回值不感兴趣时,要用下划线(_)来代替

    package main
    
    import "fmt"
    
    func main() {
        var x [5]int
        x[0] = 2
        x[1] = 3
        x[2] = 3
        var sum int
        for _, elem := range x {
            sum += elem
        }
        fmt.Println(sum)
    }

    定义数组其他方式:1)、var x = [5]int{1,2,3,4,5}

             2)、var x =[5]int{}

                 x[0]=1

             3)、var x = [...]string{                 var x = [...]string{
                  "Monday",                    "Monday", 

                  "Tuesday"                    "Tuesday",//可以带着英文逗号
                }                        }

    2、切片(Slice)

    切片类似数组,切片长度是可变的;切片是有容量(capacity)和长度(length)两个属性的;切片变量使用时,索引不能大于等于切片长度,否则报错out of range

    1)、make函数定义切片

    package main
    
    import "fmt"
    
    func main() {
        var x = make([]float64, 5) //切片的容量和长度都是5
        fmt.Println("Capacity:", cap(x), "Length:", len(x))
        var y = make([]float64, 5, 10) //切片容量为10,长度为5
        fmt.Println("Capacity:", cap(y), "Length:", len(y))
    
        for i := 0; i < len(x); i++ {
            x[i] = float64(i)
        }
        fmt.Println(x)
    
        for i := 0; i < len(y); i++ {
            y[i] = float64(i)
        }
        fmt.Println(y)
    }

    输出如图:

    2)、通过数组切片赋值,采用[low_index:high_index]方式截取数组来获取数值切片,其中获取包括low_index,不包括high_index,high_index不能大于数组长度

    使用案例如下

    package main
    
    import "fmt"
    
    func main() {
        var arr1 = [5]int{1, 2, 3, 4, 5}
        var s1 = arr1[2:3]
        var s2 = arr1[:3]
        var s3 = arr1[2:]
        var s4 = arr1[:]
        fmt.Println(s1)
        fmt.Println(s2)
        fmt.Println(s3)
        fmt.Println(s4)
    }

    运行结果如下

    3)、切片长度可变性,使用append函数

    package main
    
    import "fmt"
    
    func main() {
        var arr1 = make([]int, 5, 10)
        for i := 0; i < len(arr1); i++ {
            arr1[i] = i
        }
        fmt.Println(arr1)
    
        arr1 = append(arr1, 5, 6, 7, 8, 9, 10)
        fmt.Println("Capacity:", cap(arr1), "Length:", len(arr1))
        fmt.Println(arr1)
    }

    运行结果如图,可知切片扩容算法是原来容量大小的两倍;在测试代码中发现,如果追加元素超过两倍容量,后面扩容算法就不会是倍数扩容了

    4)、copy函数,复制切片中元素

    package main
    
    import "fmt"
    
    func main() {
        slice1 := []int{1, 2, 3, 4, 5, 6}
        slice2 := make([]int, 5, 10)
        copy(slice2, slice1)
        fmt.Println(slice1)
        fmt.Println(slice2)
    }

    运行结果如下,slice2长度为5,所以只拷贝了slice1的前五个元素

    5)、小总结一下,使用 := 方式定义切片,和数组区别仅仅是方括号[]中是否有数字或 ...

    示例如下,输出结果都是:[1 2 3 4]

    package main
    
    import "fmt"
    
    func main() {
        arr1 := [4]int{1, 2, 3, 4}
        fmt.Println(arr1)
        arr2 := [...]int{1, 2, 3, 4}
        fmt.Println(arr2)
        arr3 := []int{1, 2, 3, 4}
        fmt.Println(arr3)
    }

    3、字典(Map)

     字典是一组无序的,键值对的集合,字典也叫关联数组,数组通过索引取数,字典通过键来取数

    1)、初始化数据方式定义字典

    package main
    
    import "fmt"
    
    func main() {
        var x = map[string]string{
            "A": "Apple",
            "B": "Banana",
            "O": "Orange",
            "P": "Pear",
        }
    
        for key, val := range x {
            fmt.Println("Key:", key, "Value:", val)
        }
    }

    运行结果

     2)、make函数定义map,如果只定义,不初始化,使用会报错

    package main
    
    import "fmt"
    
    func main() {
        var x map[string]string  //定义map
        x = make(map[string]string)  //初始化map
    
        x["A"] = "Apple"
        x["B"] = "Banana"
        x["O"] = "Orange"
        x["P"] = "Peer"
    
        for key, val := range x {
            fmt.Println("Key:", key, "Value:", val)
        }
    }

    3)、使用 := 定义并初始化map

    package main
    
    import "fmt"
    
    func main() {
        x := make(map[string]string)
    
        x["A"] = "Apple"
        x["B"] = "Banana"
        x["O"] = "Orange"
        x["P"] = "Peer"
    
        for key, val := range x {
            fmt.Println("Key:", key, "Value:", val)
        }
    }

    4)、获取字典中不存在的key值,如果是整数则返回0,字符串返回 "";这样的返回值,如果map中就是有值为0或空字符串,就无法区分了

    使用 := 可以获取map中元素值和是否存在的布尔类型,如下

    package main
    
    import "fmt"
    
    func main() {
        x := make(map[string]int)
    
        x["A"] = 0
        x["B"] = 1
    
        val1, ok1 := x["C"]
        fmt.Println(val1)
        fmt.Println(ok1)
    
        val2, ok2 := x["A"]
        fmt.Println(val2)
        fmt.Println(ok2)
    }

    运行结果

    在实际使用中,可以如下判断是否含有key值

    package main
    
    import "fmt"
    
    func main() {
        x := make(map[string]int)
    
        x["A"] = 0
        x["B"] = 1
    
        if val, ok := x["C"]; ok {
            fmt.Println(val)
        }else{
            fmt.Println("不存在")
        }
    }

    输出如下

    5)、map中使用delete函数删除元素,如果不存在,删除也不会报错,不会有任何其他影响

    package main
    
    import "fmt"
    
    func main() {
        x := make(map[string]int)
    
        x["A"] = 0
        x["B"] = 1
    
        fmt.Println("Before Delete:")
        fmt.Println("Length:", len(x))
        fmt.Println(x)
    
        delete(x, "A")
    
        fmt.Println("After Delete:")
        fmt.Println("Length:", len(x))
        fmt.Println(x)
    }

    运行结果

    6)、map复杂案例一:

    package main
    
    import "fmt"
    
    func main() {
        var facebook = make(map[string]map[string]int)
    
        //注意下面对map赋值,不要对{}回车换行
        facebook["2018001"] = map[string]int{"Jemy": 25}
        facebook["2018002"] = map[string]int{"Andy": 23}
        facebook["2018003"] = map[string]int{"Bill": 22}
    
        for stu_no, stu_info := range facebook {
            fmt.Println("Student:", stu_no)
            for name, age := range stu_info {
                fmt.Println("Name:", name, "Age:", age)
            }
            fmt.Println()
        }
    }

    输出结果

    map复杂案例二(执行结果和上面一样)

    package main
    
    import "fmt"
    
    func main() {
        var facebook = map[string]map[string]int{
            "2018001": {"Jemy": 25},
            "2018002": {"Andy": 23},
            "2018003": {"Bill": 22},
        }
    
        for stu_no, stu_info := range facebook {
            fmt.Println("Student:", stu_no)
            for name, age := range stu_info {
                fmt.Println("Name:", name, "Age:", age)
            }
            fmt.Println()
        }
    }
  • 相关阅读:
    python 的基础 学习 第六天 基础数据类型的操作方法 字典
    python 的基础 学习 第五天 基础数据类型的操作方法
    python 的基础 学习 第四天 基础数据类型
    ASP.NET MVC 入门8、ModelState与数据验证
    ASP.NET MVC 入门7、Hellper与数据的提交与绑定
    ASP.NET MVC 入门6、TempData
    ASP.NET MVC 入门5、View与ViewData
    ASP.NET MVC 入门4、Controller与Action
    ASP.NET MVC 入门3、Routing
    ASP.NET MVC 入门2、项目的目录结构与核心的DLL
  • 原文地址:https://www.cnblogs.com/hujiapeng/p/9616116.html
Copyright © 2020-2023  润新知