• 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)
            }
        }
    }
     
     
  • 相关阅读:
    codeforces 686A A. Free Ice Cream(水题)
    bzoj-1192 [HNOI2006]鬼谷子的钱袋(水题)
    poj-3254 Corn Fields(状压dp)
    poj-1185 炮兵阵地(状压dp)
    Notepad++ 小技巧
    使用 notepad++ 编辑器在行首、行尾添加字符
    查看数据库中有大写的表
    Illegal mix of collations (utf8mb4_unicode_ci,IMPLICIT) and (utf8mb4_general_ci,IMPLICIT) for operation '='
    expect
    shell数组
  • 原文地址:https://www.cnblogs.com/osbreak/p/10398452.html
Copyright © 2020-2023  润新知