03 go语言_Map

1、map的操作:

1-1、创建:make(map[string]int):定义 Map,可以使用内建函数 make 也可以使用 map。
1-2、获取元素:m[key]
1-3、key不存在时,获得Value类型的初始值
1-4、用value,ok:=m[key]来判断是否存在key
1-5、用delete删除一个key

2、map的遍历:

2-1、使用range遍历key,或者遍历key,value对。
2-2、不保证遍历顺序,如需顺序,需手动对key排序。
2-3、使用len获取元素个数。

3、map的key:

3-1、map使用哈希表,必须可以比较相等。
3-2、除了slice,map,function的内建类型都可以作为key。
3-3、Struct类型不包含上述字段,也可作为key。

4、使用总结:

4-1、创建 make(map[string]int)
4-2、取值 value, ok := m[key]
4-3、删除 delete(m, key)

func mapFun()  {
		m := map[string]string{
			"name":"lili",
			"course":"golang",
			"site":"imooc",
			"quality":"notbad",
		}
		m2 := make(map[string]int)
		var m3 map[string]int
		fmt.Println(m,m2,m3)	// map[course:golang name:lili quality:notbad site:imooc] map[] map[]
		fmt.Println("Traversing map")
		for i,v := range m {
			fmt.Println(i,v) 	/*
					site imooc
					quality notbad
					name lili
					course golang
				*/
		}
		fmt.Println("Gotting values ____")
		courseName := m["course"]
		fmt.Println(courseName)		// golang
		causeName, ok := m["coursq"]
		fmt.Println(causeName,ok)	// 	false
		if causeName,ok := m["cause"]; ok{
			fmt.Println(causeName)
		}else {
			fmt.Println("key does not exist")	//key does not exist
		}
		fmt.Println("Deleting values")
		name, ok := m["name"]	// 定义name 变量 :=
		fmt.Println(name,ok)	// lili true
		delete(m,"name")
		name , ok = m["name"]	// 已定义name变量,可直接使用,不需要 :=
		fmt.Println(name,ok)	// 	false
	}
	func main() {
		mapFun()
	}

5、例:寻找最长不含有重复字符都子串。

/*
		例:寻找最长不含有重复字符都子串。
		力扣中文版:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/description/
		力扣英文版:https://leetcode.com/problems/longest-substring-without-repeating-characters/description/
		1、对于每一个字母x:
			1-1、lastOccurred[x]不存在,或者< start  无需操作
			1-2、lastOccurred[x] >= start 更新start
			1-3、更新lastOccurred[x] ,更新maxLength
	*/
	func lengthOfNonRepeatingSubStr(s string) int {
		lastOccurred := make(map[rune]int)
		start := 0
		maxLength := 0
		for i,ch := range []rune(s) {
			if lastI,ok := lastOccurred[ch]; ok && lastI >= start {
				start = lastI + 1
			}
			if i - start + 1 > maxLength {
				maxLength = i - start + 1
			}
			lastOccurred[ch] = i
		}
		return  maxLength
	}
	func main() {
		fmt.Println(lengthOfNonRepeatingSubStr("abcabcabccc"))	// 3
		fmt.Println(lengthOfNonRepeatingSubStr(""))	// 0
		fmt.Println(lengthOfNonRepeatingSubStr("b"))	// 1
		fmt.Println(lengthOfNonRepeatingSubStr("月黑见渔灯,孤光一点萤。")) // 12
		fmt.Println(lengthOfNonRepeatingSubStr("黑化肥挥发发灰会花飞灰化肥挥发发黑会飞花")) // 8
	}
	// 测试
	func sliceMapFun()  {
		arrStr := []string{"a","b","c","a","b","c","b","而","b","而"}
		 var valStr []string
		tempMap := map[string]byte{}
		for _,e := range arrStr{
			l := len(tempMap)
			tempMap[e] = 0
			if len(tempMap) != l {
				valStr = append(valStr,e)
			}
		}
		fmt.Println("valStr:",valStr)
	}
	func main() {
		sliceMapFun()	// valStr: [a b c 而]
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值