在Groovy中循环浏览地图?

Kev*_*vin 167 groovy dictionary

我有一个非常简单的任务,我想在Groovy中做,但似乎无法让它工作.我只是试图循环遍历groovy中的地图对象并打印出键和值,但这段代码不起作用.

// 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]
}
Run Code Online (Sandbox Code Playgroud)

我试图让输出看起来像这样:

iPhone: iWebOS
Android: 2.3.3
Nokia: Symbian
Windows: WM8
Run Code Online (Sandbox Code Playgroud)

有人可以详细说明如何做到这一点?

Jac*_*ack 315

闭合非常简单:

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

map.each{ k, v -> println "${k}:${v}" }
Run Code Online (Sandbox Code Playgroud)

  • @smeeb:一切都有详细记录,请看这里:http://www.groovy-lang.org/groovy-dev-kit.html#_iterating_on_maps (10认同)
  • 出于好奇,这在Groovy语言文档中有何记载(**我认为不是!**)?从Groovy新手的角度来看,我想我想知道*您怎么知道的?* (2认同)

ubi*_*con 96

或者,您可以使用Groovy Docs中for显示的循环:

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
*/
Run Code Online (Sandbox Code Playgroud)

使用for循环而不是each闭包的一个好处是更容易调试,因为你不能在each闭包内部(当使用Netbeans时)达到断点.

  • @ubiquibacon没有你不能.`return`类似于`continue`而不是`break`. (7认同)
  • 另外,您可以打破for循环,而不能在`.each`中。 (3认同)

sbg*_*ius 17

使用for循环时,s的值是Map.Entry元素,这意味着您可以从s.key获取密钥,并从s.value获取值.

  • 感谢您解释*为什么*OP的代码不起作用 (2认同)

Pab*_*zos 14

另外一个选项:

def map = ['a':1, 'b':2, 'c':3]
map.each{
  println it.key +" "+ it.value
}
Run Code Online (Sandbox Code Playgroud)