在Go语言中Map的使用和其它语言相类似。对Map中的键值对进行操作,Map作为一种键值对存储容器,使用是非常广泛的。下面我们来看一看在Go语言中Map是如何定义和使用的。
Map的定义
m := map[string]string{
//无序的
"name": "ccmouse",
"course": "golang",
"site": "imooc",
"quality": "notbad",
}
//map[K1]map[k2]V复合map
m2 := make(map[string]int) //m2 == empty map
var m3 map[string]int //m3 == nil
m,m2,m3分别是map的三种定义方式。map[key]value是Go语言map的语法规则
Map的遍历
for k, v := range m { //k,v可以省略
fmt.Println(k, v)
}
通过for循环的方式对Map进行遍历。当然Key,Value也是可以只取其一,相应的就用“_”代替就好了。
Map的取值操作
fmt.Println("Geting values")
courseanme, ok := m["course"]
fmt.Println(courseanme, ok)
if causeName, ok := m["cause"]; ok{
//当map中不存在取出空串
fmt.Println(causeName)
}else {
fmt.Println("key dose not exist")
}
这里我们可以看到Go语言中,Map在取不存在元素时并不会报错。而是取value的默认值。并且取值会返回一个bool型的ok,可以用来判断map中是否含有该元素
Map的删除操作
fmt.Println("Deleting values")
name,ok := m["name"]
fmt.Println(name,ok)
fmt.Println("Deleting values")
delete(m,"name")
name,ok = m["name"]
fmt.Println(name,ok)
Map也可以进行相应的删除操作。只需调用delete方法就可以了
利用Go语言Map求解最长不重复元素子串长度。
最长不重复子串长度,可以理解为,在一个字符串中,其子串中每个元素与其它元素都互不相同,如“abcdab”,那么最长不重复元素子串就是“abcd”长度为4
func lenrepeating(s string) int{
lastOccured := make(map[byte]int)
start := 0
maxlength := 0
for i,ch := range []byte(s){
if lastI , ok := lastOccured[ch];ok&&lastI>=start{
start = lastOccured[ch]+1
}
if i-start+1>maxlength{
maxlength = i - start+1
}
lastOccured[ch] = i
}
return maxlength
}
算法较为简单,不作赘述详细看看代码,走一编程序就懂了