Groovyでマップを反復処理するためのクイックガイド

  • link:/category/programming/ [プログラミング]

  • Groovy

1. 前書き

この短いチュートリアルでは、_each_、__eachWithIndex、__and a __for-in __loopなどの標準言語機能を使用して、Groovyでマップを反復処理する方法を見ていきます。

2. _each_メソッド

次のマップがあると想像してみましょう。
def map = [
    'FF0000' : 'Red',
    '00FF00' : 'Lime',
    '0000FF' : 'Blue',
    'FFFF00' : 'Yellow'
]
map.each { println "Hex Code: $it.key = Color Name: $it.value" }
entry変数に名前を付けることで、読みやすさを少し改善することもできます。
map.each { entry -> println "Hex Code: $entry.key = Color Name: $entry.value" }
または、キーと値を別々に扱う場合は、クロージャーでそれらを別々にリストできます。
map.each { key, val ->
    println "Hex Code: $key = Color Name $val"
}
  • Groovyでは、リテラル表記で作成されたマップが順序付けられます。*出力は、元のマップで定義したのと同じ順序になることが期待できます。

3. _eachWithIndex_メソッド

繰り返し処理中に_index_を知りたい場合があります。
たとえば、マップ内の他のすべての行をインデントしたいとします。 Groovyでそれを行うには、_entry_変数と_index_変数で_eachWithIndex_メソッドを使用します。
map.eachWithIndex { entry, index ->
    def indent = ((index == 0 || index % 2 == 0) ? "   " : "")
    println "$index Hex Code: $entry.key = Color Name: $entry.value"
}
_each_メソッドと同様に、クロージャで_entry_の代わりに_key_および_value_変数を使用することを選択できます。
map.eachWithIndex { key, val, index ->
    def indent = ((index == 0 || index % 2 == 0) ? "   " : "")
    println "$index Hex Code: $key = Color Name: $val"
}

4. _For-in_ループの使用

一方、ユースケースが命令型プログラミングに適している場合は、_for-in_ステートメントを使用してマップを反復処理することもできます。
for (entry in map) {
    println "Hex Code: $entry.key = Color Name: $entry.value"
}

5. 結論

この短いチュートリアルでは、Groovyの_each_および_eachWithIndex_メソッドと_for-in_ループを使用してマップを反復する方法を学びました。
サンプルコードはhttps://github.com/eugenp/tutorials/tree/master/core-groovy[GitHub]で入手できます。