2012-08-24 3 views
6

왜지도가 순서없이 인쇄되며 주문하려면 어떻게해야합니까?골란 프린트가 비정상적으로 인쇄됩니다.

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 : "ordered"해시 테이블 데이터 구조를 제외하고 – 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 페이지에서 이것을 설명하며 적극 권장됩니다.

관련 문제