Groovy: 将列表分割为等大小的子列表

3

如果我有:

def all=[11,12,12,13,13,13,14,15,16,10]

我想把这个列表分成3个子列表,每个子列表的大小几乎相同。
def result=[[11,12,12],[13,13,13],[14,15,16,10]] 

我给List类的metaClass添加了一个方法:percent,详情请见:https://stackoverflow.com/a/20005844/747579

这样我就可以这样做:

def result=[all.percent(0,0.33),all.percent(0.34,0.66),all.percent(0.67,1)]

我的问题是:有一种方法可以将一个列表分成n个等大小的子列表,例如;
 def result=all.equisize(n) // n is the number of sublist wanted
1个回答

13

你可以尝试:

def result = all.collate( all.size().intdiv( 3 ) )

这意味着:

assert result == [ [ 11, 12, 12 ], [ 13, 13, 13 ], [ 14, 15, 16 ], [ 10 ] ]

如果您不想在末尾保留多余的[10],您可以将false传递给collate函数的keepRemainder参数:

def result = all.collate( all.size().intdiv( 3 ), false )

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接