2013-08-20 10 views
13

prega di vedere sotto la mia mappaCome eseguire iterare una mappa in golang in ordine?

var romanNumeralDict map[int]string = map[int]string{ 
    1000: "M", 
    900 : "CM", 
    500 : "D", 
    400 : "CD", 
    100 : "C", 
    90 : "XC", 
    50 : "L", 
    40 : "XL", 
    10 : "X", 
    9 : "IX", 
    5 : "V", 
    4 : "IV", 
    1 : "I", 
} 

Sto cercando di collegare attraverso questa mappa nell'ordine delle dimensioni della chiave

for k, v := range romanNumeralDict { 
    fmt.Println("k:", k, "v:", v) 
    } 

Tuttavia, questa stampa le

k: 1000 v: M 
k: 40 v: XL 
k: 5 v: V 
k: 4 v: IV 
k: 900 v: CM 
k: 500 v: D 
k: 400 v: CD 
k: 100 v: C 
k: 90 v: XC 
k: 50 v: L 
k: 10 v: X 
k: 9 v: IX 
k: 1 v: I 

C'è un modo per stamparli nell'ordine della dimensione della chiave, quindi vorrei scorrere questa mappa come questa

k:1 
K:4 
K:5 
K:9 
k:10 

ecc ...

La ringrazio molto per il vostro aiuto!

+0

Avrai bisogno di scorrere, aggiungono le coppie per una fetta, e ordinare la fetta. – Crisfole

+0

Vedere http://stackoverflow.com/questions/12108215/golang-map-prints-out-of-order –

+4

Secondo [spec] (http://golang.org/ref/spec#For_statements), "The l'ordine di iterazione sulle mappe non è specificato e non è garantito che sia lo stesso da una iterazione alla successiva. " Gli autori di Go hanno persino intenzionalmente randomizzato la sequenza di iterazione (cioè usano un generatore di numeri casuali in modo che ogni istruzione di intervallo produca un ordr distinto), quindi nessuno in modo errato dipende da qualsiasi ordine di interazione. (Cosa succede se si dipende dall'ordine di essere diverso ogni volta? Hm ...) – fuz

risposta

27

Raccogliere tutte le chiavi, ordinarli e iterare la propria mappa chiave, come la seguente:

keys := make([]int, 0) 
for k, _ := range romanNumeralDict { 
    keys = append(keys, k) 
} 
sort.Ints(keys) 
for _, k := range keys { 
    fmt.Println(k, romanNumeralDict[k]) 
} 
Problemi correlati