Go学习日记(七) map函数

基础语法

//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语言的机制有关系

猜你喜欢

转载自blog.csdn.net/ltstud/article/details/84139928
今日推荐