【发布时间】:2023-04-08 08:20:02
【问题描述】:
根据相邻值将值列表分组的最优雅的方法是什么?
我所拥有的更广泛的背景是有一个需要分组为段落的行列表。我想说的是,如果两行之间的垂直差异低于阈值,它们就在同一个段落中。
我最终以不同的方式解决了这个问题,但我想知道这里的正确解决方案。
case class Box(y: Int)
val list = List(Box(y=1), Box(y=2), Box(y=5))
def group(list: List[Box], threshold: Int): List[List[Box]] = ???
val grouped = group(list, 2)
> List(List(Box(y=1), Box(y=2)), List(Box(y=5)))
我查看了groupBy(),但它一次只能使用一个元素。我还尝试了一种方法,该方法涉及使用 sliding() 预先计算差异,但是从原始集合中检索元素变得很尴尬。
【问题讨论】:
-
您能否举一个
f(xs) == ys的示例,其中f是所需的函数签名,xs是示例输入,ys是所需的输出? -
在
group函数的代码块中,它接受一个框列表,一个阈值并生成一个框列表,其中ys小于阈值的框被分组到一个列表中 -
你能把它翻译成代码吗?我更容易通过文字理解代码(函数签名、输入和所需输出)
-
也许
partition能满足你的需要?val (underThreshold, overThreshold) = boxes.partition(_.y < threshold)。如果不是,您的示例可能过于具体,无法理解您想要实现的目标。 -
这个问题经常出现,答案是自己写slide和group by some predicate。我最近找不到特定的 ML 线程作为示例答案。我想知道它是否被放在某个库中。
标签: scala