我有一个包含未知数量项目的数组,我想将其拆分为单独的数组,以便每个单独的数组包含不超过4个项目.在Groovy中执行此操作的最佳方法是什么?谢谢!
我们在这里有这个:如何在Groovy中将列表拆分为相同大小的列表?
我想出了这个:
List.metaClass.partition = { size ->
def rslt = delegate.inject( [ [] ] ) { ret, elem ->
( ret.last() << elem ).size() >= size ? ret << [] : ret
}
!rslt.last() ? rslt[ 0..-2 ] : rslt
}
def list = [1, 2, 3, 4, 5, 6].partition( 4 )
Run Code Online (Sandbox Code Playgroud)
哪个应该给你:
[ [ 1, 2, 3, 4 ], [ 5, 6 ] ]
Run Code Online (Sandbox Code Playgroud)
使用Groovy 1.8.6+,您可以使用list.collate( 4 )获得相同的结果
tim_yates的回答很酷,但它会抛出java.lang.ArrayIndexOutOfBoundsException空列表(例如:)[].partition(4).这可以通过这种方式修复:
List.metaClass.partition = {size ->
if (!delegate)
return []
def rslt = delegate.inject([[]]) {ret, elem ->
(ret.last() << elem).size() >= size ? (ret << []) : ret
}
!rslt.last() ? rslt[0..-2] : rslt
}
assert [].partition(4) == []
assert [1, 2, 3, 4, 5, 6].partition(4) == [[1, 2, 3, 4], [5, 6]]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4605 次 |
| 最近记录: |