Go语言中Map的基本使用
2018-05-20 11:41
489 查看
1、讲解Map的基本使用
主要知识点:map 的定义 :make(map[string]int)
获取元素:m[key]
key不存在时,获得value类型的初始值
使用 value, ok := m[key] 来判断key 是否存在
使用 delete 删除一个 key
使用range遍历key,或者 key、value 对
遍历时不保证key 的顺序,如需排序,需要手工对key排序
使用len 获取元素的个数
除了 Slice,map、function 其他的内建类型都可以作为key
以下为代码示例:
package main import "fmt" func main() { //定义map 并赋值 m := map[string]string{ "name": "ccmouse", "course": "golang", "site": "imooc", "quality": "notbad", } //定义空map 1 m2 := make(map[string]int) // m2 == empty map //定义空map 2 var m3 map[string]int // m3 == nil fmt.Println("m, m2, m3:") fmt.Println(m, m2, m3) //map[course:golang site:imooc quality:notbad name:ccmouse] map[] map[] fmt.Println("遍历 Map,Map的Key在输出时是无序的") for k, v := range m { fmt.Println(k, v) //quality notbad //name ccmouse //course golang //site imooc } fmt.Println("获取指定key的value") courseName := m["course"] fmt.Println(`m["course"] =`, courseName) //m["course"] = golang //试图读取map 中不存在的 key if causeName, ok := m["cause"]; ok { fmt.Println(causeName) } else { fmt.Println("key 'cause' does not exist") } fmt.Println("删除指定key的键值对") name, ok := m["name"] fmt.Printf("m[%q] before delete: %q, %v\n", "name", name, ok) //m["name"] before delete: "ccmouse", true delete(m, "name") name, ok = m["name"] fmt.Printf("m[%q] after delete: %q, %v\n", "name", name, ok) //m["name"] after delete: "", false }
2、实例:寻找最长不含有重复字符的字符串
例如:abcdcab ,这个字符串 最长不含有重复字符的字符串 为:abcd ,长度为 4bbbb,为b,长度为 1
pwwkew,为 wke,长度为 3
实现逻辑:
循环中对于每一个字母 x
lastOccurred[x] 不存在时,或者 小于 start,则无需操作
lastOccurred[x] >= start,则更新 start
更新 lastOccurred[x],更新 maxLength
代码实现逻辑如下:
package main import ( "fmt" ) 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("abcabcbb")) //3 fmt.Println( lengthOfNonRepeatingSubStr("bbbbb")) //1 fmt.Println( lengthOfNonRepeatingSubStr("pwwkew")) //3 fmt.Println( lengthOfNonRepeatingSubStr("")) //0 fmt.Println( lengthOfNonRepeatingSubStr("b")) //1 fmt.Println( lengthOfNonRepeatingSubStr("abcdef")) //6 fmt.Println( lengthOfNonRepeatingSubStr("一二三二一")) //3 fmt.Println( lengthOfNonRepeatingSubStr( "黑化肥挥发发灰会花飞灰化肥挥发发黑会飞花")) //8 }
相关文章推荐
- Go语言中映射表map的使用
- Go语言Map的使用
- Go语言中定时器cron的基本使用教程
- go语言之map的使用
- golang实战使用gin+xorm搭建go语言web框架restgo详解2 框架基本架构
- 浅析Go语言编程当中映射和方法的基本使用
- Go语言中协程的概念和基本使用
- Go语言中的Array、Slice、Map和Set使用详解
- go语言的 数组、slice、map使用(转)
- Go语言map映射的基本操作
- 18 如何使用go来采集windows的基本硬件信息后发送到CMDB的服务器上
- c++、c#、Python、GO语言基本语法比较
- GO语言LiteIDE的安装使用
- Go语言使用Beego的ORM插入Mysql后,时区不一致的解决方案
- GO语言(六)接口使用
- 为什么我们要使用Go语言以及如何使用它的
- go语言defer使用
- 20131030: 森林结构的运用(poj: 树的转换,电话号码,物质分解记录);带权并查集(食物链);C++输入;map的基本使用
- Go语言学习笔记十三: Map集合
- 关于Go语言中的slice的一些使用心得