• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
正在输入>
博客园    首页    新随笔    联系   管理    订阅  订阅

GO学习笔记(4)

四. Map

  4.1. 定义

func mapDefine() {
    // map是map是一种无序的基于key-value的数据结构, Go语言中的map是引用类型, 必须初始化才能使用

    // 基本定义格式: map[KeyType]ValueType
    var m map[int]int
    fmt.Println(m)
    // m[1] = 100    // 因为没有为其分配内存,所以对其操作会报错: panic: assignment to entry in nil map

    // 使用make()为其分配内存
    m = make(map[int]int, 5)
    fmt.Println(m)
    m[1] = 100
    fmt.Println(m) // map[1:100]

    // 可以在声明的时候就为其初始化, 这样就为其分配了内存
    m1 := map[int]string{
        1: "GO",
        2: "C++",
    }
    fmt.Println(m1) // map[1:GO 2:C++]
    m1[3]="nodejs"
    fmt.Println(m1) // map[1:GO 2:C++ 3:nodejs]
}

  4.2. map简单操作

func eachMap() {
    m1 := map[int]string{
        1: "GO",
        2: "C++",
        3: "java",
        4: "python",
    }

    // 添加
    m1[10] = "C"
    
    // 删除
    delete(m1,1)
    
    // 判断是否存在
    v, ok := m1[2]
    if ok {
        fmt.Println(v)
    }
    
    // 遍历
    for k, v := range m1 {
        fmt.Println(k, v)
    }
}

  4.3. 根据key排序

func sortMap()  {
    rand.Seed(time.Now().UnixNano()) //初始化随机数种子

    var scoreMap = make(map[string]int, 200)

    for i := 0; i < 100; i++ {
        key := fmt.Sprintf("stu%02d", i) //生成stu开头的字符串
        value := rand.Intn(100)          //生成0~99的随机整数
        scoreMap[key] = value
    }
    //取出map中的所有key存入切片keys
    var keys = make([]string, 0, 200)
    for key := range scoreMap {
        keys = append(keys, key)
    }
    //对切片进行排序
    sort.Strings(keys)
    //按照排序后的key遍历map
    for _, key := range keys {
        fmt.Println(key, scoreMap[key])
    }
}

  4.4. slice 和 map

func sliceOrMap() {
    // 值为slice的map
    m := make(map[int][]int, 3)
    m[1] = []int{1, 2, 3}
    m[2] = []int{5, 6, 7}
    fmt.Println(m) // map[1:[1 2 3] 2:[5 6 7]]

    // 元素为map的slice
    s := make([]map[int]string, 5)
    fmt.Println(s) // [map[] map[] map[] map[] map[]]
    //s[0][0] = "qqq"    // panic: assignment to entry in nil map  必须先分配内存
    s[0] = make(map[int]string, 3)
    s[0][111] = "slice"
    s[0][222] = "map"
    s[0][333] = "array"
    fmt.Println(s) // [map[111:slice 222:map 333:array] map[] map[] map[] map[]]
}

 

posted @ 2020-08-07 13:45  正在输入>  阅读(135)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3