如何使用Groovy将指定列表转换为二维数组/列表的列表?
实现嵌套列表转对应二维数组的Groovy方案
嘿,这个需求其实很好解决,核心就是把原列表里的固定元素和需要按索引配对的嵌套子列表分开处理,然后按位置组合就行。针对你的输入,我写了个直接的Groovy实现:
def mylist = ['a','b',['c1','c2','c3'],'d',['e1','e2','e3']] // 先拆分出固定不变的元素和需要展开的子列表 def fixedElements = [mylist[0], mylist[1], mylist[3]] def expandGroups = [mylist[2], mylist[4]] // 遍历子列表的索引,逐个组合成目标子数组 def result = (0..<expandGroups[0].size()).collect { idx -> // 按顺序拼接:前两个固定元素 + 当前索引的c元素 + d元素 + 当前索引的e元素 [fixedElements[0], fixedElements[1], expandGroups[0][idx], fixedElements[2], expandGroups[1][idx]] } println result // 输出结果正好是你要的:[[a, b, c1, d, e1], [a, b, c2, d, e2], [a, b, c3, d, e3]]
简单解释下逻辑:
- 第一步先把原列表里不需要展开的单个元素(
a、b、d)和需要配对的嵌套列表(['c1','c2','c3']、['e1','e2','e3'])拆分出来,这样逻辑更清晰; - 因为两个嵌套子列表长度相同,所以我们遍历它们的索引范围(从0到子列表长度-1);
- 每个索引位置,按你想要的顺序把固定元素和对应索引的子列表元素拼接成新的子数组;
- 最后用
collect方法把所有子数组收集起来,就得到了目标二维数组。
如果你的需求更通用(比如不确定固定元素位置、嵌套子列表数量更多),还可以写更灵活的版本,但针对你给出的输入,上面的代码已经足够简洁高效啦。
内容的提问来源于stack exchange,提问作者Bhanuchander Udhayakumar
相关产品推荐
相关产品推荐

