私は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]
}
出力を次のようにします。
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}" }
あるいは、 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
*/
for
クロージャーではなくeach
ループを使用することの利点の1つは、(Netbeansを使用している場合は)each
クロージャー内でブレークポイントにヒットできないため、デバッグが簡単になることです。
Forループを使用する場合、sの値はMap.Entry要素です。つまり、s.keyからキーを取得し、s.valueからキーを取得できます。
別のオプション:
def map = ['a':1, 'b':2, 'c':3]
map.each{
println it.key +" "+ it.value
}