• Go语言学习 _基础04 _Map&Set


    Go语言学习 _基础04 _Map&Set

    1、map
    package map_test
    
    import (
       "fmt"
       "testing"
    )
    
    func TestInitMap(t *testing.T) {
       m1 := map[int]int{1: 1, 2: 4, 3: 9} // 初始化方式一 声明 并初始化
       t.Log(m1[2])
       t.Logf("len m1 = %d", len(m1))
       m2 := map[int]int{} // 初始化方式二 声明 不初始化
       m2[4] = 16
       t.Logf("len m2 = %d", len(m2))
       m3 := make(map[int]int, 10) // key-walue : int-int cap = 10
       // 初始化方式三 通过 make函数 (map 的 key 和 value 都不是 确定的 大小可能不一 所以 map的 make方法 没有len参数)
       t.Logf("len m3 = %d", len(m3)) 
    }
    
    func TestAccessNotExistingkey(t *testing.T) {
       m1 := map[int]int{}
       t.Log(m1[1])
       m1[2] = 0
       t.Log(m1[2]) // 对于不存在的 键值 会被 默认输出 0 ,那么这样和 初始化wei0 就很难区分了 吗? Go中 需要进行手动的 区分
       m1[3] = 0
       isExit(m1, 3)
       isExit(m1, 4)
    }
    
    // TODO 手动判断 键值 是否存在
    func isExit(m map[int]int, k int) {
       if v, ok := m[k]; ok {
          fmt.Printf("Key %d 's value is %d", k, v)
       } else {
          fmt.Printf("Key %d is not exiting !", k)
       }
    }
    
    func TestTravelMap(t *testing.T) {
       m1 := map[int]int{1: 1, 2: 4, 3: 9}
       for k, v := range m1 {  // 通过range遍历 map
          t.Log(k, v)
       }
    }
    // 通过 Map 实现 工厂模式 TODO 以后 后面会 加一个 Java 实现的 比较 看看 Go 的简洁
    func TestMapWithFunValue(t *testing.T){
       m := map[int]func(op int) int{}
       m[1] = func(op int) int { return op}
       m[2] = func(op int) int { return op*op}
       m[3] = func(op int) int { return op*op*op}
       t.Log(m[1](2),m[2](2),m[3](2))
    }
    
    2、set

    Go语言中 没有 set 不过 可以 通过 Map 来 模拟 set 使用 key 作为 集合元素 使用 bool 作为 值 true 表示 存在

    package set_test
    
    import (
       "fmt"
       "testing"
    )
     // TODO Go语言中 没有 set 不过 可以 通过 Map 来 模拟 set 使用 key 作为 集合元素 使用 bool 作为 值 true 表示 存在
    func TestMapForSet(t *testing.T) {
       mySet := map[int]bool{}
       mySet[1] = true
       n := 3
       isExiting(mySet, n)
       mySet[3] = true
       t.Log(len(mySet))
       delete(mySet, 1) // 删除 元素
       isExiting(mySet, n)
    }
    func isExiting(set map[int]bool, k int) {
       if  set[k] {
          fmt.Printf("%d  is exiting", k)
       } else {
          fmt.Printf(" %d is not exiting !",k)
       }
    }
    
  • 相关阅读:
    Nginx 模块:--with-http_sub_status_module
    Nginx http请求&日志
    Nginx 目录和配置语法&DNS配置
    Nginx 全局配置
    Nginx 相关操作1
    Nginx入坑基础篇
    杂谈maven工程实践(3)
    杂谈maven工程类型(2)
    杂谈maven相关概念(1)
    Django
  • 原文地址:https://www.cnblogs.com/OwlInTheOaktree/p/15209874.html
Copyright © 2020-2023  润新知