web-dev-qa-db-fra.com

Parcourez Map in Groovy?

J'essaie d'accomplir une tâche très simple à Groovy, mais je n'arrive pas à la faire fonctionner. J'essaie simplement de parcourir en boucle un objet de la carte et d'imprimer la clé et la valeur, mais ce code ne fonctionne pas.

// A simple map
def map = [
        iPhone : 'iWebOS',
        Android: '2.3.3',
        Nokia  : 'Symbian',
        Windows: 'WM8'
]

// Print the values
for (s in map) {
    println s + ": " + map[s]
}

J'essaie d'obtenir que la sortie ressemble à ceci:

iPhone: iWebOS
Android: 2.3.3
Nokia: Symbian
Windows: WM8

Quelqu'un pourrait-il s'il vous plaît expliquer comment faire cela?

160
Kevin

Assez simple avec une fermeture:

def map = [
           'iPhone':'iWebOS',
           'Android':'2.3.3',
           'Nokia':'Symbian',
           'Windows':'WM8'
           ]

map.each{ k, v -> println "${k}:${v}" }
307
Jack

Vous pouvez également utiliser une boucle for comme indiqué dans le Groovy Docs :

def map = ['a':1, 'b':2, 'c':3]
for ( e in map ) {
    print "key = ${e.key}, value = ${e.value}"
}

/*
Result:
key = a, value = 1
key = b, value = 2
key = c, value = 3
*/

Un avantage de l'utilisation d'une boucle for par opposition à une fermeture each est un débogage plus facile, car vous ne pouvez pas atteindre un point d'arrêt à l'intérieur d'une fermeture each (avec Netbeans).

94
ubiquibacon

Lorsque vous utilisez la boucle for, la valeur de s est un élément Map.Entry, ce qui signifie que vous pouvez obtenir la clé de s.key et la valeur de s.value.

17
sbglasius

Une autre option:

def map = ['a':1, 'b':2, 'c':3]
map.each{
  println it.key +" "+ it.value
}
14
Pablo Pazos