您好,登錄后才能下訂單哦!
這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)Go語(yǔ)言基礎(chǔ)中字典類型的遍歷和排序如何理解,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
go是什么
golang是一種編譯語(yǔ)言,可以將代碼編譯為機(jī)器代碼,編譯后的二進(jìn)制文件可以直接部署到目標(biāo)機(jī)器而無(wú)需額外的依賴,所以golang的性能優(yōu)于其他的解釋性語(yǔ)言,且可以在golang中使用goroutine來(lái)實(shí)現(xiàn)并發(fā)性,它提供了一個(gè)非常優(yōu)雅的goroutine調(diào)度程序系統(tǒng),可以很容易地生成數(shù)百萬(wàn)個(gè)goroutine。
我們可以像遍歷數(shù)據(jù)那樣對(duì)字段類型數(shù)據(jù)進(jìn)行遍歷:
testMap := map[string]int{
"one": 1,
"two": 2,
"three": 3,
}
for key, value := range testMap {
fmt.Println(key, value)
}
這種遍歷模式和我們?cè)?PHP 中通過(guò) foreach
對(duì)關(guān)聯(lián)數(shù)組進(jìn)行遍歷很像,上述代碼輸出結(jié)果是:
three 3one 1two 2
當(dāng)然,我們還可以借助匿名變量只獲取字典的值:
for _, value := range testMap { fmt.Println(value)}
或者像這樣只獲取字典的鍵名:
for key := range testMap { fmt.Println(key)}
所謂鍵值對(duì)調(diào)指的是交換字典的鍵和值,在 PHP 關(guān)聯(lián)數(shù)組中,有內(nèi)置數(shù)組函數(shù) array_flip 來(lái)實(shí)現(xiàn)類似的功能,在 Go 語(yǔ)言中,我們需要手動(dòng)編寫代碼來(lái)實(shí)現(xiàn),比如我們要對(duì)調(diào) testMap
字典的鍵值,可以這么做:
invMap := make(map[int] string, 3)
for k, v := range testMap {
invMap[v] = k
}
for k, v := range invMap {
fmt.Println(k, v)
}
上述代碼的打印結(jié)果是:
3 three1 one2 two
在上篇教程中,我們提到過(guò) Go 語(yǔ)言的字典不同于 PHP 的關(guān)聯(lián)數(shù)組,是一個(gè)無(wú)序集合,如果你想要對(duì)字典進(jìn)行排序,可以通過(guò)分別為字典的鍵和值創(chuàng)建切片,然后通過(guò)對(duì)切片進(jìn)行排序來(lái)實(shí)現(xiàn),換句話說(shuō),如果要對(duì)字典按照鍵進(jìn)行排序,可以這么做:
keys := make([]string, 0)
for k, _ := range testMap {
keys = append(keys, k)
}
sort.Strings(keys) // 對(duì)鍵進(jìn)行排序
fmt.Println("Sorted map by key:")
for _, k := range keys {
fmt.Println(k, testMap[k])
}
上述代碼打印結(jié)果是:
Sorted map by key:one 1three 3two 2
該結(jié)果是按照鍵名在字母表中的排序進(jìn)行升序排序的結(jié)果。
如果要對(duì)字典按照值進(jìn)行排序,可以這么做:
values := make([]int, 0)
for _, v := range testMap {
values = append(values, v)
}
sort.Ints(values) // 對(duì)值進(jìn)行排序
fmt.Println("Sorted map by value:")
for _, v := range values {
fmt.Println(invMap[v], v)
}
這里我們借助了之前創(chuàng)建的 invMap
通過(guò)字典的值反查對(duì)應(yīng)的鍵,上述代碼打印結(jié)果如下:
Sorted map by value:one 1two 2three 3
該結(jié)果是按照鍵值對(duì)應(yīng)數(shù)字大小進(jìn)行升序排序的結(jié)果。
另外,你可能已經(jīng)注意到我們?cè)趯?duì)切片進(jìn)行排序時(shí),使用了 Go 語(yǔ)言內(nèi)置的 sort 包,這個(gè)包提供了一系列對(duì)切片和用戶自定義集合進(jìn)行排序的函數(shù)。
上述就是小編為大家分享的Go語(yǔ)言基礎(chǔ)中字典類型的遍歷和排序如何理解了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。