溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Go語(yǔ)言基礎(chǔ)中字典類型的遍歷和排序如何理解

發(fā)布時(shí)間:2022-01-17 16:14:20 來(lái)源:億速云 閱讀:162 作者:kk 欄目:大數(shù)據(jù)

這期內(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)

所謂鍵值對(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è)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI