Dictionary 在Groovy中循环映射?

Dictionary 在Groovy中循环映射?,dictionary,groovy,Dictionary,Groovy,我有一个非常简单的任务,我正试图在Groovy中完成,但似乎无法让它工作。我只是尝试在groovy中循环一个map对象并打印出键和值,但这段代码不起作用 // A simple map def map = [ iPhone : 'iWebOS', Android: '2.3.3', Nokia : 'Symbian', Windows: 'WM8' ] // Print the values for (s in map) {

我有一个非常简单的任务,我正试图在Groovy中完成,但似乎无法让它工作。我只是尝试在groovy中循环一个map对象并打印出键和值,但这段代码不起作用

// 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]
}
我试图让输出看起来像这样:

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

有人能详细说明一下如何做到这一点吗?

非常简单,只需一个结尾:

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

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

使用for循环时,s的值是一个Map.Entry元素,这意味着您可以从s.key中获取key,从s.value中获取value,或者您可以使用
for
循环,如图所示:

使用
for
循环而不是
每个
闭包的一个好处是更容易调试,因为您无法在
每个
闭包内找到断点(使用Netbeans时)。

另一个选项:

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

我使用GGTS 3.2并定期在闭包中设置断点(包括“每个”闭包)。问题是使用F6逐步完成一个闭包,因为它将覆盖整个过程。从技术上讲,你可以多次按F5,最终到达那个位置,但断点更快。更新答案。我使用的是Netbeans,它对Groovy/Grails的调试还不到标准。另外,您可以在
中中断for循环,而不在
中。每个
@AlexanderSuraphel您是正确的,您不能使用
中断
退出
每个
,但您可以使用
返回
@ubiquibacon不,您不能
return
类似于
continue
not
break
。出于好奇,Groovy语言文档中记录了这一点(我不认为是!)?我想我在想,从Groovy新手的角度来看,你是怎么知道的?@smeeb:所有东西都有很好的文档记录,看看这里:感谢你解释为什么OP的代码不起作用的,正如你在答案中看到的,问题是在地图上迭代会给你一个“条目”集合,您假设它将为您提供键,您将查找值。如果您想这样做,请在map.keySet()上迭代,其余部分将按照您的预期工作。如果您在代码内部for循环中使用
s.key
&
s.value
,则应该可以工作。
def map = ['a':1, 'b':2, 'c':3]
map.each{
  println it.key +" "+ it.value
}