gpt4 book ai didi

playframework - 创建一个 Play Enumeratee 将相似元素分组到具有最大大小的列表中

转载 作者:行者123 更新时间:2023-12-02 03:28:33 25 4
gpt4 key购买 nike

我想要一个 Enumeratee,它将 Enumerator 中的元素分组到最大大小的组中,其中组中的所有元素都具有相同的值。因此它将扫描 Enumerator 并提取值,只要它们的值相同。当它达到一个新值时,它将把所有以前的结果滚动到一个列表中(限制大小)。然后它将使用新值开始一个新列表。

为了简单起见,如果我们有一个像这样的列表:

[3,3,3,3,3,3,4,4,4,6,6,6,6,6,2,2,2,2,2,2,4,4]

最大大小为 5,然后它将像这样对其进行分区:

[[3,3,3,3,3],[3],[4,4,4],[6,6,6,6,6],[2,2,2,2,2],[2],[4,4]]

我一直在试验 Enumeratee.grouped、Enumeratee.takeWhile 和 Enumeratee.take 的各种组合,但我还没有找到任何可行的方法。

最佳答案

您的问题可以使用Iteratee.fold 解决

val groupingIteratee: Iteratee[Int,List[List[Int]]] = 
Iteratee.fold(List.empty[List[Int]])(folder(maxElementsInGroup))

其中 folder 是定义为(示例)的函数:

def folder(max: Int) = (list: List[List[Int]], el: Int) => {
list match {
case Nil => List(List(el))
case xs :: rest => {
xs match {
case head :: tail if head == el && xs.size < max => (el +: xs) +: rest
case head :: tail => List(head) +: (xs +: rest)
}
}
}
}

关于playframework - 创建一个 Play Enumeratee 将相似元素分组到具有最大大小的列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28862199/

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