Bucle a través del mapa en Groovy?


Tengo una tarea muy simple que estoy tratando de hacer en Groovy, pero parece que no puedo hacer que funcione. Solo estoy tratando de recorrer un objeto de mapa en groovy e imprimir la clave y el valor, pero este código no funciona.

// 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]
}

Estoy tratando de que la salida se vea así:

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

¿Podría alguien explicar cómo hacer esto??

Author: friederbluemle, 2012-04-06

4 answers

Bastante simple con un cierre:

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

map.each{ k, v -> println "${k}:${v}" }
 275
Author: Jack,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-19 13:07:28

Alternativamente puedes usar un bucle for como se muestra en los documentos Groovy :

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
*/

Una ventaja de usar un bucle for en lugar de un cierre each es una depuración más fácil, ya que no puede alcanzar un punto de interrupción dentro de un cierre each (cuando se usa Netbeans).

 85
Author: ubiquibacon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-06 14:24:38

Cuando se utiliza el bucle for, el valor de s es un Mapa.Elemento de entrada, lo que significa que puede obtener la clave de s. key y el valor de s. value

 16
Author: sbglasius,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-04-06 06:15:47

Otra opción:

def map = ['a':1, 'b':2, 'c':3]
map.each{
  println it.key +" "+ it.value
}
 11
Author: Pablo Pazos,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-19 00:12:36