基础语法
//map[k]v
func mapData() {
//一般空的map用make创建
m1 := make(map[int]int) // == empty map
var m2 map[string]int //return nil
//创建空的map
m3 := map[string] string{
}
//map是hash,是无序的
m := map[string]string {
"name" : "张三",
"age" : "12",
"password" : "122345",
"w1w1w1" : "sasa ",
}
for k,v := range m {
fmt.Println(k,v)
}
fmt.Println(m,m1,m2,m3)
}
map 判断数据是否存在
func buildMap() {
m := map[string] string{
"product" : "saas",
"project" : "yunmao",
"sync" : "false",
}
//取出一个存在的数据
//fmt.Println(m["product"])
//取出一个不存在的数据
//fmt.Println(m["priduct"]) //返回一个空的串 go是zero value返回
//判断是否存在
product, ok := m["product"]
products, ok := m["priduct"]
fmt.Println(product,ok)
fmt.Println(products,ok)
//if使用
if cluseName,ok := m["product"]; ok{
fmt.Println(cluseName,ok)
} else {
panic("no data")
}
}
删除map里的元素
func delemap() {
m := map[string] string{
"product" : "saas",
"project" : "yunmao",
"sync" : "false",
}
p,ok := m["product"]
fmt.Println(p, ok)
fmt.Println("删除map delete\n")
delete(m, "product") //先删除在赋值给p ,如果先赋值在删除,等于复制一份则不会返回空串
if p, ok = m["product"]; ok {
fmt.Println(p, ok)
} else {
fmt.Println("error",p,ok)
}
}
saas true
删除
map delete
error false
字符串处理rune字符类型
//转成rune
func runeCheck() {
s := "Yes我爱中国啊!" //UTF-8
fmt.Println(utf8.RuneCountInString(s)) //获取字符数量
//len获取字节长度
for k, v := range []rune(s) { //每个rune出来是四个字节
fmt.Printf("(%d %c)",k,v)
}
}
func test() {
s := "Yes我爱中国啊!" //UTF-8
fmt.Println([]byte(s))
fmt.Printf("%X\n",[]byte(s)) //ask码
for k, v := range []rune(s) { //v is rune
fmt.Printf("(%d %X)",k, v)
}
fmt.Println()
fmt.Println(utf8.RuneCountInString(s))
bytestring := []byte(s)
//解码rune
//for len(bytestring) > 0 {
// ch, i:= utf8.DecodeRune(bytestring)
// bytestring = bytestring[i:]
// fmt.Printf("%c ", ch)
//}
fmt.Println()
for len(bytestring) > 0 {
v, k := utf8.DecodeRune(bytestring)
bytestring = bytestring[k:]
fmt.Printf("%c ", v)
}
}
//中文字符串重复排除 习题
func checkChinaLang(str string) int{
//最后一次出现位置
lastOccurred := make(map[rune]int)
//开始位置默认0
start := 0
//最大长度
maxLength := 0
for i, ch := range []rune(str) {
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
}
map[k]v map[k1]map[k2]v (key的类型 value返回的类型)
map创建的几种方式
1:m := make(map[string] string) //创建一个空的map == empty map
扫描二维码关注公众号,回复:
4289022 查看本文章
2:var m map[string] int //创建空的map == nil
map是hash格式的,为无序的
如果取map一个不存在的键/值,可以取出zeroValue(空值) 跟go语言的机制有关系