groovy:将列表拆分为equi-size的子列表

时间:2013-11-25 09:44:56

标签: list groovy

如果我有:

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 metod:

请参阅: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个子列表equisize,例如;

 def result=all.equisize(n) // n is the number of sublist wanted

1 个答案:

答案 0 :(得分:8)

你可以尝试:

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

给出了:

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

如果您不希望将备用[10]保留在最后,则可以将false传递给keepRemainder的{​​{1}}参数:

collate