學(xué)用mvc做網(wǎng)站重慶seo網(wǎng)絡(luò)推廣優(yōu)化
Go語(yǔ)言中的字典
字典就是存儲(chǔ)鍵值對(duì)映射關(guān)系的集合,在Go語(yǔ)言中,需要在聲明時(shí)指定鍵和值的類(lèi)型,此外Go語(yǔ)言中的字典是個(gè)無(wú)序集合,底層不會(huì)按照元素添加順序維護(hù)元素的存儲(chǔ)順序。
如下所示,Go語(yǔ)言中字典的簡(jiǎn)單示例:
func DictExample() {var tempMap map[string]inttempMap = map[string]int{"one": 1,"two": 2,"three": 3,}k := "two"v, ok := tempMap[k]// ok,如果key存在,則ok為true,否則ok為falseif ok {fmt.Printf("the element of key %q:%d", k, v)} else {fmt.Println("Not found!")}
}
1 字典聲明
字典的聲明基本上沒(méi)有多余的元素,例如:
var tempMap map[string]int
// tempMap:聲明的字典變量名
// string:字典鍵的類(lèi)型
// int:字典值的類(lèi)型
2 字典初始化
Go語(yǔ)言中,可以先聲明再初始化變量,也可以通過(guò) :=
將字典的聲明和初始化合并為一條語(yǔ)句:
testMap := map[string]int{"one": 1,"two": 2,"three": 3,
}
打印字典testMap,發(fā)現(xiàn)其并沒(méi)有按照存儲(chǔ)的順序進(jìn)行打印,這是因?yàn)镚o語(yǔ)言中字典是個(gè)無(wú)序集合。
在Go語(yǔ)言中,字典的初始化通常要和初始化在一起進(jìn)行,如果分開(kāi)了出現(xiàn)編譯的報(bào)錯(cuò),如下所示:
var tempMap map[string]int
tempMap["one"] = 1
如果需要初始化一個(gè)空的字典,需要使用Go語(yǔ)言?xún)?nèi)置的 make() 函數(shù):
var tempMap = make(map[string]int)
tempMap["one"] = 1
還可以通過(guò) make() 函數(shù)的第二個(gè)參數(shù)選擇是否在創(chuàng)建的時(shí)候指定該字典的初始化存儲(chǔ)容量(超出會(huì)自動(dòng)擴(kuò)容):
testMap = make(map[string]int, 100)
3 元素賦值
字典的賦值指定鍵值對(duì)即可,如下所示:
testMap["one"] = 1
注:字典初始化之后才能進(jìn)行賦值操作,如果僅僅是聲明,此時(shí)字典的值為 nil, 在nil 上進(jìn)行操作,編譯時(shí)會(huì)報(bào)panic,導(dǎo)致編譯不通過(guò)。
4 查找元素
Go語(yǔ)言中,通過(guò)如下的代碼查找特定的鍵值對(duì):
value, ok := testMap["one"]
if ok {// 字典中存儲(chǔ)鍵"one"對(duì)應(yīng)的值
}
// 如上代碼,value是真正返回的鍵值,ok是是否在字典中找到key對(duì)應(yīng)值的標(biāo)識(shí),這是一個(gè)布爾值,如果查找成功,返回true,否則返回false
5 刪除元素
Go語(yǔ)言中,使用delete() 用于刪除容器內(nèi)的元素,也能夠用來(lái)刪除字典元素,如下所示:
delete(testMap,"one")
執(zhí)行刪除時(shí),如果“one”不存在或者字典尚未進(jìn)行初始化,也不會(huì)產(chǎn)生報(bào)錯(cuò)。
6 遍歷元素
Go語(yǔ)言中,可以像遍歷數(shù)組一樣對(duì)字典進(jìn)行遍歷,如下所示:
testMap := map[string]int{"one":1,"two":2,"three":3
}for key,value := range testMap {fmt.Println(key, value)
}
也可以使用匿名變量,只獲取字典的值:
for _,value := range testMap {fmt.Println( value)
}
或者只獲取字典的鍵:
for key := range testMap {fmt.Println(key)
}
7 鍵值對(duì)調(diào)
testMap := map[string]int{"one": 1,"two": 2,"three": 3,
}newMap := make(map[int]string)for k, v := range testMap {newMap[v] = k
}for k, v := range newMap {fmt.Println(k, v)
}
8 字典排序
Go語(yǔ)言中的字典是個(gè)無(wú)序集合,如果想要對(duì)字典進(jìn)行排序,可以通過(guò)分別為字典的鍵或值創(chuàng)建切片,然后通過(guò)對(duì)切片進(jìn)行排序?qū)崿F(xiàn)。
按照鍵進(jìn)行排序:
testMap := map[string]int{"one": 1,"two": 2,"three": 3,
}
// 創(chuàng)建切片
keys := make([]string, 0)
for key := range testMap {keys = append(keys, key)
}
// 切片排序
sort.Strings(keys)
for _, v := range keys {fmt.Println(v, testMap[v])
}
按照值進(jìn)行排序:
testMap := map[string]int{"one": 1,"two": 2,"three": 3,
}
// 創(chuàng)建切片
values := make([]int, 0)
for _, value := range testMap {values = append(values, value)
}
// 對(duì)字典的值進(jìn)行排序
sort.Ints(values)
for _, v := range values {fmt.Println(v)
}