«1. Введение
В этом кратком руководстве мы рассмотрим способы перебора карты в Groovy с использованием стандартных функций языка, таких как each, eachWithIndex и цикл for-in.
2. Метод each
Давайте представим, что у нас есть следующая карта:
def map = [
'FF0000' : 'Red',
'00FF00' : 'Lime',
'0000FF' : 'Blue',
'FFFF00' : 'Yellow'
]
Мы можем перебирать карту, предоставляя каждому методу простое замыкание:
map.each { println "Hex Code: $it.key = Color Name: $it.value" }
Мы также можем немного улучшить читабельность, дав имя входной переменной:
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
Иногда нам нужно знать индекс во время итерации.
Например, предположим, что мы хотим сделать отступ для каждой второй строки на нашей карте. Чтобы сделать это в Groovy, мы будем использовать метод eachWithIndex с входными и индексными переменными:
map.eachWithIndex { entry, index ->
def indent = ((index == 0 || index % 2 == 0) ? " " : "")
println "$index Hex Code: $entry.key = Color Name: $entry.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.
Код примера доступен на GitHub.