4.3.5.映射反转
如果一个映射的值是唯一的且值的类型和键一样都是被支持类型的话,我们就可以很容易的将该映射进行反转操作。
1 2 3 4 5 6 7 | cityForPopulation := make(map[int]string, len(populationForCity)) for city, population := range populationForCity { cityForPopulation[population] = city } fmt.Println(cityForPopulation) map[12610000:Istanbul 11290000:Beijing 12690000:Mumbai 11620000:Karachi] |
因为populationForCity是map[string]int类型的,所以我们开始创建了一个反转的映射cityForPopulation,其类型为map[int]string。然后我们遍历原始映射,并将原始映射的值作为反转映射的键,键作为反转映射的值插入反转映射中。
当然,如果值不唯一的话,映射反转会失败,而实际上发生的是,最后一个非唯一值作为键被保存下来。这个问题可以通过创建一个可以含有多个值的值的映射来解决,所以对于上面的例子,可以创建一个map[int][]string类型(int类型的键,[]string类型的值)的映射。接下来我们将介绍一个实际的例子。