gpt4 book ai didi

algorithm - 合并 Scala 列表中的元素

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:51:17 25 4
gpt4 key购买 nike

我正在尝试将以下 Java 片段移植到 Scala。它获取一个 MyColor 对象列表,并合并所有在彼此增量范围内的对象。这似乎是一个可以使用 Scala 的一些功能位优雅地解决的问题。有什么建议吗?

List<MyColor> mergedColors = ...;
MyColor lastColor = null;
for(Color aColor : lotsOfColors) {
if(lastColor != null) {
if(lastColor.diff(aColor) < delta) {
lastColor.merge(aColor);
continue;
}
}
lastColor = aColor;
mergedColors.add(aColor);
}

最佳答案

这是另一个递归解决方案,它的优点是尾递归(因此不会出现堆栈溢出),但缺点是会进行大量列表操作,因此可能会造成浪费。最后调用 reverse 是将输出颜色放回输入顺序,但如果您不关心顺序则不需要。

def processColors(colors: List[Color], delta: Double): List[Color] = {
def process(in: List[Color], accum: List[Color]): List[Color] = in match {
case x :: y :: ys if x.diff(y) < delta => process( x.merge(y) :: ys, accum )
case x :: xs => process( xs, x :: accum )
case Nil => accum
}

process(colors, Nil).reverse
}

关于algorithm - 合并 Scala 列表中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2426230/

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