4.3.4.键序映射的遍历
在实际使用中,我们经常需要以特定的顺序生成并展示这些数据。下面是一个例子,展示了如何以字母顺序(严格地说,是Unicode码点)输出映射populationForCity中的城市。
1 2 3 4 5 6 7 8 9 10 11 12 13 | cities := make([]string, 0, len(populationForCity)) for city := range populationForCity { cities = append(cities, city) } sort.Strings(cities) for _, city := range cities { fmt.Printf("%-10s %8d\n", city, populationForCity[city]) } Beijing 11290000 Istanbul 12610000 Karachi 11620000 Mumbai 12690000 |
我们首先创建了一个[]string类型的长度为0(即,为空)的切片,但是设置了足够的容量来容纳映射的键。然后我们遍历映射得到所有的键(因为我们只需使用一个变量,所以不需要检索每个“键-值”对),并将每个城市追加到切片cities中。接下来,我们将该切片排序,然后遍历该切片(使用空白标识符忽略int类型的索引),并查找每个城市对应的人口。
上面的程序,创建了一个足够大的空切片来保存映射中的所有键,然后排序并遍历该切片,从而产生有序的输出,这个方法普适于所有希望按键序遍历映射的场景中。
另一种方法是使用一种有序的数据结构,例如,一个有序的映射,我们将在后面的章节介绍到。按值排序也是可以做到的,例如,将一个映射反转。