2012-08-24 46 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の "Programming in Go"では204ページでこれについて説明しており、強くお勧めします。

関連する問題