gpt4 book ai didi

groovy - 如何在 Groovy 中 'Slice' 集合

转载 作者:行者123 更新时间:2023-12-04 00:23:09 24 4
gpt4 key购买 nike

我有一组对象,我想将它们分解为一组集合,其中每个连续的 3 个元素组都在一个集合中。
例如,如果我有

def l = [1,4,2,4,5,9]

我想把它变成:
def r = [[1,4,2], [4,5,9]]

我现在通过迭代集合并分解它来做它..但是我然后需要将这些“组”传递到处理它们的并行化函数中..消除这种 O(n) 预处理会很好工作,然后说类似的话
l.slice(3).collectParallel { subC -> process(subC) }

我在 Range 类上找到了 step 方法,但它看起来只作用于索引。有什么聪明的想法吗?

更新:
我不认为这是引用链接的重复,尽管它非常接近。正如下面所建议的,它更多是我正在寻找的迭代器类型的东西......然后子集合将被传递到 GPars collectParallel 中。理想情况下,我不需要分配一个全新的集合。

最佳答案

查看 groovy 1.8.6。 List 上有一个新的 collat​​e 方法。

def list = [1, 2, 3, 4]
assert list.collate(4) == [[1, 2, 3, 4]] // gets you everything
assert list.collate(2) == [[1, 2], [3, 4]] //splits evenly
assert list.collate(3) == [[1, 2, 3], [4]] // won't split evenly, remainder in last list.

看看 Groovy List documentation有关更多信息,因为还有一些其他参数可以为您提供其他一些选项,包括删除其余部分。

就并行处理而言,您可以使用 gpars 浏览列表。 .
def list = [1, 2, 3, 4, 5]
GParsPool.withPool {
list.collate(2).eachParallel {
println it
}
}

关于groovy - 如何在 Groovy 中 'Slice' 集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5873594/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com