2012-08-24 57 views
6

为什么地图打印不按顺序,我怎样才能打印它?golang地图打印失序

package main 

import (
    "fmt" 
) 

type monthsType struct { 
    no int 
    text string 
} 

var months = map[int]string{ 
    1:"January", 2:"Fabruary", 3:"March", 4:"April", 5:"May", 6:"June", 
    7:"July", 8:"August", 9:"September", 10:"October", 11:"Novenber", 12:"December", 
} 

func main(){ 
    for no, month := range months { 
     fmt.Print(no) 
     fmt.Println("-" + month) 
    } 
} 

打印出:

10-October 
7-July 
1-January 
9-September 
4-April 
5-May 
2-Fabruary 
12-December 
11-Novenber 
6-June 
8-August 
3-March 
+1

[Google Go Lang Assignment Order]的可能重复(http://stackoverflow.com/questions/11853396/google-go-lang-assignment-order) –

+7

请注意,对于所有基于哈希表的集合,这是相同的每种语言:散列过程失去了命令。 –

+0

@dystroy:除了“有序”散列表数据结构 – newacct

回答

14

代码:

func DemoSortMap() (int, error) { 
    fmt.Println("use an array to access items by number:") 
    am := [2]string{"jan", "feb"} 
    for i, n := range am { 
     fmt.Printf("%2d: %s\n", i, n) 
    } 
    fmt.Println("maps are non-sorted:") 
    mm := map[int]string{2: "feb", 1: "jan"} 
    for i, n := range mm { 
     fmt.Printf("%2d: %s\n", i, n) 
    } 
    fmt.Println("access items via sorted list of keys::") 
    si := make([]int, 0, len(mm)) 
    for i := range mm { 
     si = append(si, i) 
    } 
    sort.Ints(si) 
    for _, i := range si { 
     fmt.Printf("%2d: %s\n", i, mm[i]) 
    } 

    return 0, nil 
} 

输出(其中大部分来自M.萨默的book被盗):

use an array to access items by number: 
0: jan 
1: feb 
maps are non-sorted: 
2: feb 
1: jan 
access items via sorted list of keys:: 
1: jan 
2: feb 
5

地图未排序,因此您可以使用切片对地图进行排序。 Mark Summerfield的书“Go in Programming”在第204页对此进行了解释,并强烈建议。