Go學習日記(七) map函式
阿新 • • 發佈:2018-11-29
基礎語法
//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語言的機制有關係