GO_Map_05

Map 声明

m := map[string]int{"one": 1, "two": 2, "three": 3}
m1 := map[string]int{}
m1["one"] = 1
m2 := make(map[string]int, 10 /*Initial Capacity*/)
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[5] = 16
	t.Logf("len m2=%d", len(m2))
	m3 := make(map[int]int, 10)
	t.Logf("len m3=%d", len(m3))

}

Map 元素的访问

与其他主要编程语⾔言的差异
在访问的 Key 不存在时,仍会返回零值,不能通过返回 nil 来判断元素是否存在

if v, ok := m["four"]; ok {
t.Log("four", v)
} else {
t.Log("Not existing")
}
// map不存在key测试  不存在key 取值为0, 判断是否存在key ok:=m1[3]
func TestAccessNotExistingKey(t *testing.T) {
	m1 := map[int]int{}
	t.Log(m1[1])
	m1[2] = 0
	t.Log(m1[2])
	m1[3] = 0
	// v, ok:=m1[3]; v: m1[3]   ok: 判断map是否存在该key 存在返回true 反之false
	if v, ok := m1[3]; ok {
		t.Logf("Key 3 value is %d", v)
	} else {
		t.Logf("Key 3 is not existing")
	}
}

Map 遍历

// map 遍历
func TestTravelMap(t *testing.T) {
	m1 := map[int]int{1: 2, 2: 4, 3: 8, 4: 16}
	for k, v := range m1 {
		t.Log(k, v)
	}
}

Map 与工厂模式

  • Map 的 value 可以是一个方法
  • 与 Go 的 Dock type 接口方式一起,可以方便的实现单一方法对象的工厂模式

实现 Set

Go 的内置集合中没有 Set 实现, 可以 map[type]bool

  1. 元素的唯一性
  2. 基本操作
    1. 添加元素
    2. 判断元素是否存在
    3. 删除元素
    4. 元素个数
package _map

import "testing"

// - Map的value可以是一个方法
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](1), m[2](2), m[3](3))
}

// set
func TestMapForSet(t *testing.T) {
	mSet := map[int]bool{}
	mSet[1] = true
	//n := 1 // map_ext_test.go:27: 1 is existing
	n := 3 // map_ext_test.go:30: 3 is not existing
	if mSet[n] {
		t.Logf("%d is existing", n)
	} else {
		t.Logf("%d is not existing", n)
	}
	mSet[3] = true
	t.Log(len(mSet)) // map_ext_test.go:33: 2
	delete(mSet, 1)
	n = 1 // map_ext_test.go:39: 1 is not existing
	if mSet[n] {
		t.Logf("%d is existing", n)
	} else {
		t.Logf("%d is not existing", n)
	}
}

PS:学习笔记,侵删!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值