【问题标题】:GROOVY transform single array into deep nested arrayGROOVY 将单个数组转换为深度嵌套数组
【发布时间】:2019-02-01 02:28:41
【问题描述】:

我有一个数组作为源。我想使用 Groovy 将源代码转换为结果。 我没有看到任何类似的问题。这就是我在这里发帖的原因。

我尝试使用此代码获取家庭中的第一个成员并将所有其他成员放入子列表中,但失败了

source.each{ family -> family.each{ 
        member -> member.get(0).collate(1,family.size()-1)
    }
}

来源:

[
  [{
        "id": "0001",
        "role": "parent",
        "age": 30
    },
    {
        "id": "0002",
        "role": "child",
        "age": 1
    },
    {
        "id": "0003",
        "role": "child",
        "age": 3
    }
],
[{
        "id": "0004",
        "role": "parent",
        "age": 31
    },
    {
        "id": "0005",
        "role": "child",
        "age": 5
    }
  ]
]

结果:

[{
    "id": "0001",
    "role": "parent",
    "age": 30,
    "children": [{
            "id": "0002",
            "role": "child",
            "age": 1
        },
        {
            "id": "0003",
            "role": "child",
            "age": 3
        }
    ]
},
{
    "id": "0004",
    "role": "parent",
    "age": 31,
    "children": [{
        "id": "0005",
        "role": "child",
        "age": 5
    }]
}]

【问题讨论】:

    标签: arrays groovy nested-loops sublist


    【解决方案1】:

    您可以通过添加“父”地图和仅包含子地图的新地图来塑造数据(groovy 中的+ 会合并)。例如:

    def data = new groovy.json.JsonSlurper().parseText('[[{ "id": "0001", "role": "parent", "age": 30 }, { "id": "0002", "role": "child", "age": 1 }, { "id": "0003", "role": "child", "age": 3 } ], [{ "id": "0004", "role": "parent", "age": 31 }, { "id": "0005", "role": "child", "age": 5 }]]')
    
    println(data.collect{ groups ->
        // XXX
        groups.find{ it.role=="parent" } + [children: groups.findAll{it.role=="child"}] 
    })
    // => [[id:0001, role:parent, age:30, children:[[id:0002, role:child, age:1], [id:0003, role:child, age:3]]], [id:0004, role:parent, age:31, children:[[id:0005, role:child, age:5]]]]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-19
      • 1970-01-01
      • 2017-03-27
      • 2021-10-03
      • 1970-01-01
      相关资源
      最近更新 更多