2017-09-29 8 views
0

j'ai dictionnairedonnées d'impression dans le dictionnaire en utilisant groovy

Output = [a:2, c:13, b:5, z:'Test'] 

J'utilise pour la boucle comme suit

for(i in Output){ 
     println(Output[i.key]); 
    } 

il est le résultat.

2 
13 
5 
Test 

mais j'attends le résultat (inverse).

Test  
5 
13 
2 

Pourriez-vous s'il vous plaît aide-moi?

+0

Don n'utilisez pas de variables majuscules. Tôt ou tard, l'analyseur groovy confondra cela avec un nom de classe et s'étouffera. – cfrick

Répondre

0

Ce que vous avez n'est pas un "dictionnaire" (ce n'est pas Python), mais un Map.

L'ordre de ses entrées n'est pas défini c'est juste une clé de mappage à la valeur sans aucun ordre. L'ordre que vous obtenez est (pseudo) aléatoire et ne peut pas être dépendante.

Btw. le moyen le plus Groovy pour produire la sortie serait de ne pas utiliser une boucle for, mais e. g.

[a:2, c:13, b:5, z:'Test'].values().each { println it } 

Si vous voulez avoir une commande, vous avez besoin d'une liste au lieu d'une carte, e. g. comme une liste de cartes comme dans

[[a:2], [c:13], [b:5], [z:'Test']].reverse().collectMany { it.values() }.each { println it } 

ou une liste de listes comme dans

[['a', 2], ['c', 13], ['b', 5], ['z', 'Test']].reverse().collect { it[1] }.each { println it } 

ou peut-être cette liste de cartes qui serait probablement la plus propre de ces solutions

[[key:'a', value:2], [key:'c', value:13], [key:'b', value:5], [key:'z', value:'Test']].reverse().collect { it.value }.each { println it } 
+0

Dans l'exemple d'OP, il est en fait commandé, car le littéral groovy map vous donne 'LinkedHashMap'. – cfrick

+0

@cfrick bien sûr, mais c'est un détail d'implémentation, ce n'est pas garanti, n'est-ce pas? – Vampire

+0

Son garanti d'avoir l'ordre d'insertion (bien par les docs). Choisir la bonne implémentation de 'Map' est la responsabilité du développeur pour obtenir de telles propriétés. Bien sûr, pour un 'Map', tous les paris sont désactivés et vous êtes plus sûr de ne prendre aucun ordre, trier, peu importe. – cfrick