zoukankan      html  css  js  c++  java
  • go-数组-切片-字典

    声明一个数组变量的同时为该变量赋值。
    var numbers = [3]int{1, 2, 3}
    
    另一种便捷方法, 类型字面量中省略代表其长度的数字
    var numbers = [...]int{1, 2, 3}
    对于数组来说,索引值既不能小于0也不能大于或等于数组值的长度。
    索引值的最小有效值从0开始。
    len是Go语言的内建函数的名称。
    该函数用于获取字符串、数组、切片、字典或通道类型的值的长度。
    var length = len(numbers)
    如果我们只声明一个数组类型的变量而不为它赋值,那么该变量的值将会是指定长度的、其中各元素均为元素类型的零值(或称默认值)的数组值。
    var numbers2 [5]int;  则它的值会是[5]int{0, 0, 0, 0, 0}

     切片

    var numbers3 = [5]int{1, 2, 3, 4, 5}
    var slice1 = numbers3[1:4]
    切片表达式一般由字符串、数组或切片的值以及由方括号包裹且由英文冒号“:”分隔的两个正整数组成。
    这两个正整数分别表示 [ 元素下界索引 : 元素上界索引 ]。
    切片表达式numbers3[1:4]的求值结果为[]int{2, 3, 4}。
    切片的更多操作方法
    numbers3[1:4:4] 
    这第三个正整数被称为容量上界索引。
    它的意义在于可以把作为结果的切片值的容量设置得更小。
    append会对切片值进行扩展并返回一个新的切片值。
    slice1 = append(slice1, 6, 7)
    slice1的值变为了[]int{2, 3, 4, 6, 7}
    切片方法--复制
    该操作的实施方法是调用copy函数。该函数接受两个类型相同的切片值作为参数,
    并会把第二个参数值中的元素复制到第一个参数值中的相应位置(索引值相同)上。
     这种复制遵循最小复制原则,即:被复制的元素的个数总是等于长度较短的那个参数值的长度
    var slice4 = []int{0, 0, 0, 0, 0, 0, 0}
    copy(slice4, slice1)   
    通过上述复制操作,slice4会变为[]int{2, 3, 4, 6, 7, 0, 0}
     字典
    字典类型的字面量如下:
    map[K]T    
    其中,“K”意为键的类型,而“T”则代表元素(或称值)的类型
    字典的键类型必须是可比较的,否则会引起错误。也就是说,它不能是切片、字典或函数类型。
    map[int]string{1: "a", 2: "b", 3: "c"}
    赋值给一个变量:
    mm := map[int]string{1: "a", 2: "b", 3: "c"} 
     运用索引表达式取出字典中的值
    b :
    = mm[2]
    对于字典值来说,如果其中不存在索引表达式欲取出的键值对, 那么就以它的值类型的空值(或称默认值)作为该索引表达式的求值结果
    针对字典的索引表达式可以有两个求值结果。
    第二个求值结果是bool类型的。
    它用于表明字典值中是否存在指定的键值对。
    从字典中删除键值对,调用内建函数delete
    delete(mm, 4)   
    无论mm中是否存在以4为键的键值对,delete都会“无声”地执行完毕。
    有则删除,无则不做。
    与切片类型相同,字典类型属于引用类型。它的零值即为nil。
    func testMap() {
        var a map[string]string = map[string]string{
            "key": "value",
        }
        a["abc"] = "efg1"
        a["abc"] = "efg2"
        a["abc1"] = "efg"
    
        fmt.Println(a)//map[abc:efg2 abc1:efg key:value]
    }
    func testMap2() {
        a := make(map[string]map[string]string, 100)
        a["key1"] = make(map[string]string)
        a["key1"]["key2"] = "abc2"
        a["key1"]["key3"] = "abc3"
        a["key1"]["key4"] = "abc4"
        a["key1"]["key5"] = "abc5"
        fmt.Println(a) //map[key1:map[key2:abc2 key3:abc3 key4:abc4 key5:abc5]]
        c := a["key1"]["key5"]
        fmt.Println(c) //abc5
        delete(a, "key1")
    }
    func trans(a map[string]map[string]string) {
        for k, v := range a {
            fmt.Println(k)
            for k1, v1 := range v {
                fmt.Println("	", k1, v1)
            }
        }
    }
     
     
  • 相关阅读:
    Entity Framework Core 2.0 新特性
    asp.net core部署时自定义监听端口,提高部署的灵活性
    asp.net core使用jexus部署在linux无法正确 获取远程ip的解决办法
    使用xshell连接服务器,数字键盘无法使用解决办法
    使用Jexus 5.8.2在Centos下部署运行Asp.net core
    【DevOps】DevOps成功的八大炫酷工具
    【Network】Calico, Flannel, Weave and Docker Overlay Network 各种网络模型之间的区别
    【Network】UDP 大包怎么发? MTU怎么设置?
    【Network】高性能 UDP 应该怎么做?
    【Network】golang 容器项目 flannel/UDP相关资料
  • 原文地址:https://www.cnblogs.com/osbreak/p/10398452.html
Copyright © 2011-2022 走看看