這里對調(diào)是指調(diào)換 key 和 value。如果 map 的值類型可以作為 key 且所有的 value 是唯一的,那么通過下面的方法可以簡單的做到鍵值對調(diào)。
示例 8.7 invert_map.go:
package main
import (
"fmt"
)
var (
barVal = map[string]int{"alpha": 34, "bravo": 56, "charlie": 23,
"delta": 87, "echo": 56, "foxtrot": 12,
"golf": 34, "hotel": 16, "indio": 87,
"juliet": 65, "kili": 43, "lima": 98}
)
func main() {
invMap := make(map[int]string, len(barVal))
for k, v := range barVal {
invMap[v] = k
}
fmt.Println("inverted:")
for k, v := range invMap {
fmt.Printf("Key: %v, Value: %v / ", k, v)
}
}
輸出結(jié)果:
inverted:
Key: 34, Value: golf / Key: 23, Value: charlie / Key: 16, Value: hotel / Key: 87, Value: delta / Key: 98, Value: lima / Key: 12, Value: foxtrot / Key: 43, Value: kili / Key: 56, Value: bravo / Key: 65, Value: juliet /
如果原始 value 值不唯一那么這么做肯定會出錯;為了保證不出錯,當(dāng)遇到不唯一的 key 時應(yīng)當(dāng)立刻停止,這樣可能會導(dǎo)致沒有包含原 map 的所有鍵值對!一種解決方法就是仔細(xì)檢查唯一性并且使用多值 map,比如使用 map[int][]string
類型。
練習(xí) 8.2
構(gòu)造一個將英文飲料名映射為法語(或者任意你的母語)的集合;先打印所有的飲料,然后打印原名和翻譯后的名字。接下來按照英文名排序后再打印出來。