2012-08-24 13 views
6

¿Por qué la impresión del mapa está desordenada y cómo la obtengo por encargo?mapa de golang imprime fuera de servicio

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) 
    } 
} 

Imprime:

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

posible duplicado de [Orden de asignación de Google Go Lang] (http://stackoverflow.com/questions/11853396/google-go-lang-assignment-order) –

+7

Tenga en cuenta que esto es igual para todas las colecciones basadas en tabla hash en cada idioma: el proceso de hashing pierde el orden. –

+0

@dystroy: excepto las estructuras de datos de la tabla hash "ordenada" – newacct

Respuesta

14

Código:

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 
} 

(mayor parte de ella robados de M. Summerfield de book)

salida:

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

Los mapas no están ordenados, por lo que puede usar una sección para ordenar su mapa. El libro de Mark Summerfield "Programming in Go" explica esto en la página 204 y es muy recomendable.

Cuestiones relacionadas