Go基础-map

// xuhh_go_map project
/*
1.map的特点:
    a.map是go语言的内置引用类型,所以多个map指向同一个底层的情况下,一个值发生变化,全部发生变化
    b.map是无序的,每次迭代的顺序都是不确定的。
    c.map只有 len 没有 cap。
    d.map不是线程安全的,在多个go-routine中使用的时候,要加锁。
    e.map[key]value
        key 必须支持 运算符(== 、!= )的操作,例如 number/string/pointer/array/struct/interface
        value 可以是任意类型。
2.map的创建:
    a. new 进行创建
        mapA := new(map[int]string)
        *mapA = map[int]string{}
        (*mapA)[112] = "112"
        (*mapA)[110] = "110"
    b.直接声明创建
        var map1 map[int]string = map[int]string{}
        map2 := map[int]string{
            11: "11",
            12: "12",
            13: "13",
        }
    c.make进行创建
        map3 := make(map[int]string, 1000) // 1000 是map的容量 ,这点和slice是一样的,预先申请一块内存,避免以后频繁扩张,提升性能
3.map 的一些基本操作
    a.判断键值是否存在
        if v, ok := map1[5]; ok == true {
            fmt.Println("this key is exit ", v)
        } else {
            fmt.Println("this key is not exit ")
        }
    b.增加
        map[key] = value
    c.修改
        map 在修改value的时候
            如果value是值类型,要想改变值,需要全部替换(value 换 value)
            如果是引用类型,则可以直接赋值替换
        mapS := map[string]PERSON{}
        mapS["xuhh"] = PERSON{name: "xuhh", old: 26}
        mapS["xuhh"].name = "xuhehe" // error  cannot assign to mapS["xuhh"].name
    d.删除
        可以在迭代的时候安全删除键值对
        delete(map, key)
    e.迭代遍历
        for k, v := range map {
            fmt.Println("key = ", k, "value = ", v)
        }
*/

package main

import (

    "fmt"

)

type PERSON struct {

    name string

    old  int

}

func main() {

    //new 进行创建

    mapA := new(map[int]string)

    *mapA = map[int]string{}

    (*mapA)[112] = "112"

    (*mapA)[110] = "110"

    for v := range *mapA {

        fmt.Println(v)

    }

    //直接创建,可以直接初始化:

    var map1 map[int]string = map[int]string{}

    map2 := map[int]string{

        11: "11",

        12: "12",

        13: "13",

    }

    fmt.Println(map2)

    map1[2] = "222"

    map1[3] = "333"

    map1[1] = "111"

    map1[6] = "666"

    map1[8] = "888"

    map1[5] = "555"

    fmt.Println(map1)

    // make 创建

    map3 := make(map[int]string, 1000)

    map3[22] = "22"

    fmt.Println(map3)

    // map 的操作

    // 查找

    if v, ok := map1[5]; ok == true {

        fmt.Println("this key is exit ", v)

    } else {

        fmt.Println("this key is not exit ")

    }

    //add

    map1[5] = "exit"

    fmt.Println(map1[5])

    //modify

    mapS := map[string]PERSON{}

    mapS["xuhh"] = PERSON{name: "xuhh", old: 26}

    //mapS["xuhh"].name = "xuhehe" // error  cannot assign to mapS["xuhh"].name

    //map 在操作value 的时候,如果value 是 值类型 ,要想改变值,需要全部替换(value 换 value),如果不是引用类型,则可以直接赋值替换

    //delete

    delete(map1, 5)

    if _, ok := map1[5]; !ok {

        fmt.Println("this key is deleted")

    }

    //迭代遍历

    for k, v := range map1 {

        fmt.Println("key = ", k, "value = ", v)

    }

}




 

                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值