第5课 Go的map

来源:互联网 发布:淘宝店铺装修广告图片 编辑:程序博客网 时间:2024/06/06 19:55
package mainimport (    "fmt")/*    map    -类似其他语言中的哈希表或者字典,用key-value形式储存数据    -Key必须是支持==或者!=比较运算的类型,不可以是函数,map或者slice    -Map查找比线性搜索快ihenduo,但比使用索引访问数据的类型慢100倍    -Map使用make()创建,支持:=这种简写方式    -make([KeyType]valueType,cap),cap表示容量,可省略    -超出容量时会自动扩容,但尽量提供一个合理的初始值    -使用len()获取元素个数    -键值对不存在时自动添加,使用delete()删除某键值对    -使用for range对map和slice进行迭代操作*/func main() {    var m map[int]string    m = map[int]string{}    fmt.Println(m)    //完成了一个map的初始化    var n map[int]string    n = make(map[int]string)    fmt.Println(n)    //也可以用make来创建    p := make(map[int]string)    fmt.Println(p)    //也是可以的    fmt.Println("-----")    m[1] = "OK"    a := m[2]    fmt.Println(a) //输出空    fmt.Println(m[1])    delete(m, 1)      //删除    fmt.Println(m[1]) //删除后输出空    //简单map的操作    fmt.Println("-----")}
package mainimport (    "fmt")func main() {    var m map[int]map[int]string     //这里创建了两层map    m = make(map[int]map[int]string) //这里只初始化了一层map    a, ok := m[2][1] //只有一个返回值的时候返回的是取到的值,第二个返回值返回是否键值对存在    if !ok {         //如果ok不存在,对map的第二层进行初始化        m[2] = make(map[int]string)    }    m[2][1] = "good"    a, ok = m[2][1]    fmt.Println(a, ok)    //复杂的map操作}

slice 下的 for-range

package mainimport (    "fmt")func main() {    for i, v := range slice {        //返回slice相对应的索引,i相当于计数器,v相当于slice所存储的值,是拷贝,不会影响slice本身        //可以通过slice[i]对slice本身进行操作    }}

map下的for-range

package mainimport (    "fmt")func main() {    for k, v := range map {        //返回k,v键值对(同样是拷贝)        //当然可以对m[k]直接对map进行操作    }}

for-range为map初始化

package mainimport (    "fmt")func main() {    sm := make([]map[int]string, 5) //这是一个以map为元素的切片,初始化容量、元素为5    for _, v := range sm {        v = make(map[int]string, 1)        v[1] = "ok"        fmt.Println(v)    }    fmt.Println(sm)    /*        输出结果        map[1:ok]        map[1:ok]        map[1:ok]        map[1:ok]        map[1:ok]        [map[] map[] map[] map[] map[]]        显然v是拷贝的,无法对map本身进行操作        如果要对本身操作,需要做如下修改(利用i)    */    smm := make([]map[int]string, 5)    for i := range sm {        smm[i] = make(map[int]string, 1)        smm[i][1] = "ok"        fmt.Println(smm[i])    }    fmt.Println(smm)}

对map的间接排序

package mainimport (    "fmt"    "sort")func main() {    //对map的间接排序    m := map[int]string{1: "a", 2: "b", 3: "c", 4: "d", 5: "e"}    s := make([]int, len(m))    i := 0    for k, _ := range m {        s[i] = k        i++    } //已经将map存入slice中    fmt.Println(s) //每次打印发现不同,体现map的无序性    sort.Ints(s)   //对slice排序    fmt.Println(s) //每次打印出来的是有序的    //我们只能实现对map的间接排序,因为map是无序的,我们只能提取后排序    fmt.Println(m)}
0 0
原创粉丝点击