187

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

誰かがこれを行う方法について詳しく説明してもらえますか?

4

4 に答える 4

353

クロージャー付きの非常にシンプル:

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

map.each{ k, v -> println "${k}:${v}" }
于 2012-04-05T23:23:29.697 に答える
109

または、 GroovyDocsforに示されているようにループを使用することもできます。

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クロージャとは対照的にループを使用する利点の1つは、クロージャeach内のブレークポイントに到達できないためeach(Netbeansを使用している場合)、デバッグが容易になることです。

于 2013-04-19T19:08:16.977 に答える
20

forループを使用する場合、sの値はMap.Entry要素です。つまり、s.keyからキーを取得し、s.valueから値を取得できます。

于 2012-04-06T06:15:47.477 に答える
17

別のオプション:

def map = ['a':1, 'b':2, 'c':3]
map.each{
  println it.key +" "+ it.value
}
于 2016-01-19T00:12:36.083 に答える