ch11、Map扩展

ch11、Map扩展

1、Map与工厂模式

  • Map的value值可以是一个方法(位置介于key type与value type之间)
package ext_map

import "testing"

func TestMapWithFunValue(t *testing.T) {
	// func(op int)是值的函数
	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)) // output:2 4 8
}
  • 与Go的duck typing接口方式一致,可以方便的实现单一方法对象的工厂模式

2、实现Set

  • 元素的唯一性
  • 基本操作:添加元素;判断元素是否存在;删除元素;获取元素个数
package ext_map

import "testing"

func TestMapForSet(t *testing.T) {
	mySet := map[int]bool{}
	mySet[1] = true // 新增
	n := 1
	if mySet[1] { // 判断元素是否存在
		t.Logf("%d is existing", n)
	} else {
		t.Logf("%d is not existing", n)
	}
	mySet[3] = true
	t.Log(len(mySet)) // 元素个数
	delete(mySet, 1)  //删除元素
	if mySet[1] {     // 判断元素是否存在
		t.Logf("%d is existing", n)
	} else {
		t.Logf("%d is not existing", n)
	}
}

/*
output:
1 is existing
2
1 is not existing
*/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值