代码之家  ›  专栏  ›  技术社区  ›  Noor Basha Shaik

在groovy中的for循环中遍历子映射

  •  0
  • Noor Basha Shaik  · 技术社区  · 3 年前

    让我们假设我有一个像下面这样的映射,其中包含另一个映射(子映射)。我喜欢将子映射打印为每个键的单独行。

    def map =[   
      1: [
        [name:"Jerry", age: 42, city: "New York"],
        [name:"Long", age: 25, city: "New York"]
      ],  
      2: [
        [name:"Dustin", age: 29, city: "New York"],
        [name:"Bob", age: 34, city: "New York"]
      ]
    ]
    

    目前,我遍历父映射,并能够打印名称。但是,这并不是我真正想要的。我想看看我是否至少可以遍历父映射。到目前为止,我没有看到错误。

        for(allentries in map){
        loggerApi.info("${allentries.key}: ${allentries.value.name}") // this prints [Jerry, Long] for key 1 & [Dustin, Bob] for key 2
        loggerApi.info("${allentries.key}: ${allentries.value.age}")
        loggerApi.info("${allentries.key}: ${allentries.value.city}")
        
        }
    

    你能告诉我应该在上面的代码中添加什么吗

    Name Age City
    Jerry 42 New York
    Long 25 New York
    Dustin 29 New York
    Bob 34 New York
    

    欣赏

    非常感谢。

    Br, 中午。

    0 回复  |  直到 3 年前
        1
  •  1
  •   tim_yates    3 年前

    假设您在问题中的输入结构错误,并且中的每个值内都有一个映射列表 map ,您可以在内部循环中迭代它们

    ​def map =[   
      1: [
        [name:"Jerry", age: 42, city: "New York"],
        [name:"Long", age: 25, city: "New York"]
      ],  
      2: [
        [name:"Dustin", age: 29, city: "New York"],
        [name:"Bob", age: 34, city: "New York"]
      ]
    ]
    
    map.each { key, value ->
      value.each { submap ->
        println "$key $submap.name $submap.age $submap.city"
        // Or with no prefixing number:
        // println "$submap.name $submap.age $submap.city"
      }
    }