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("\t", k1, v1)
        }
    }
}

 

 

 

 

 

 

 

 

posted @ 2019-02-18 22:55  osbreak  阅读(499)  评论(0编辑  收藏  举报