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 而]
}