首页 > 解决方案 > 如何迭代嵌套地图?

问题描述

这是我的嵌套地图,我想遍历每个“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
}

标签: groovy

解决方案


如何迭代嵌套地图?

一种方法是使用以下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}"
        }
    }

推荐阅读