1. 程式人生 > >Go學習日記(七) map函式

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

2:var m map[string] int  //建立空的map     == nil

map是hash格式的,為無序的

如果取map一個不存在的鍵/值,可以取出zeroValue(空值) 跟go語言的機制有關係