Files
the-way-to-go_ZH_CN/eBook/08.6.md
Guobiao Mei 07d26e14d1 Fix links to the code examples
Change-Id: I644c6a516abab2577353644c128102457deeb41a
2014-12-18 16:49:46 -05:00

1.6 KiB
Raw Blame History

#8.6 倒置map 这里倒置是指调换key和value。如果map的值类型可以作为key且所有的value是唯一的那么通过下面的方法可以简单的做到倒置

示例 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)
	}
	fmt.Println()
}

输出结果:

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值不唯一那么这么做肯定会出错为了保证不出错当遇到不唯一的key时应当立刻停止这样可能会导致没有包含原map的所有键值对一种解决方法就是仔细检查唯一性并且使用多值map比如使用map[int][]string类型。

练习 8.2 map_drinks.go

构造一个将英文饮料名映射为法语(或者任意你的母语)的集合;先打印所有的饮料,然后打印原名和翻译后的名字。接下来按照英文名排序后再打印出来。

##链接