groovy - 如何迭代嵌套地图?
问题描述
这是我的嵌套地图,我想遍历每个“myMap”:
def myMaps = [
"myMap1": [
"prop1": 'sdfsdfdsf',
"prop2": 'dsdfsdfs',
"prop3": 'sdfsdfsdf'
],
"myMap2": [
"prop1": 'sdfsdfdsf',
"prop2": 'dsdfsdfs',
"prop3": 'sdfsdfsdf'
]
"myMap3": [
"prop1": 'sdfsdfdsf',
"prop2": 'dsdfsdfs',
"prop3": 'sdfsdfsdf'
]
"myMap4": [
"prop1": 'sdfsdfdsf',
"prop2": 'dsdfsdfs',
"prop3": 'sdfsdfsdf'
]
]
我尝试了几种方法,但它没有迭代地图,它仍然把它当作一个单一的项目:
myMaps.each() {
println '========'
it.dump()
}
for (item in myMaps) {
println '========'
println item.key
}
编辑
这是我能做到这一点的唯一方法,但我不明白为什么。这也可以通过更传统的 foreach 样式循环实现吗?
myMaps.each {
key, value ->
println key
println value
}
解决方案
如何迭代嵌套地图?
一种方法是使用以下each(Closure)
方法:
def myMaps = [
"myMap1": [
"prop1": 'sdfsdfdsf',
"prop2": 'dsdfsdfs',
"prop3": 'sdfsdfsdf'
],
"myMap2": [
"prop1": 'sdfsdfdsf',
"prop2": 'dsdfsdfs',
"prop3": 'sdfsdfsdf'
],
"myMap3": [
"prop1": 'sdfsdfdsf',
"prop2": 'dsdfsdfs',
"prop3": 'sdfsdfsdf'
],
"myMap4": [
"prop1": 'sdfsdfdsf',
"prop2": 'dsdfsdfs',
"prop3": 'sdfsdfsdf'
]
]
myMaps.each { outerKey, outerValue ->
println "${outerKey}:"
outerValue.each { innerKey, innerValue ->
println "\t${innerKey} -> ${innerValue}"
}
}
输出:
myMap1:
prop1 -> sdfsdfdsf
prop2 -> dsdfsdfs
prop3 -> sdfsdfsdf
myMap2:
prop1 -> sdfsdfdsf
prop2 -> dsdfsdfs
prop3 -> sdfsdfsdf
myMap3:
prop1 -> sdfsdfdsf
prop2 -> dsdfsdfs
prop3 -> sdfsdfsdf
myMap4:
prop1 -> sdfsdfdsf
prop2 -> dsdfsdfs
prop3 -> sdfsdfsdf
编辑:
对问题进行了编辑以添加以下内容:
这也可以通过更传统的 foreach 样式循环实现吗?
如果你想使用for
循环,有很多方法可以做到这一点。一个显示在这里:
for(Map.Entry outerEntry : myMaps) {
println "${outerEntry.key}"
for(Map.Entry innerEntry: outerEntry.value) {
println "\t${innerEntry.key} -> ${innerEntry.value}"
}
}
推荐阅读
- python - 为什么熊猫在逐行构建数据框时会转换dtype?
- python-3.x - 从 Azure Databricks 笔记本登录到 Azure ML 工作区
- elasticsearch - Elasticsearch Nest 6 将对象 enabled=false 反序列化为 null
- ruby-on-rails - 从 React App 使用 SendGrid 和 Rails API 发送电子邮件
- javascript - 使用 Javascript 更新单选按钮标签 innerHTML 后,如何防止单选按钮消失?
- networkx - number_of_cliques 和 max_clique 计算什么?
- html - ngRoute 不会在 angularjs 控制器中触发
- c# - 如何使用 Pack Icon 作为鼠标光标?
- python - 迭代时从列表中删除时跳过迭代
- prestashop - 在管理产品页面中使用自定义字段复选框 - PrestaShop 1.6