Dictionary 在Groovy中循环映射?
我有一个非常简单的任务,我正试图在Groovy中完成,但似乎无法让它工作。我只是尝试在groovy中循环一个map对象并打印出键和值,但这段代码不起作用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) {
// 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
notbreak
。出于好奇,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
}