gpt4 book ai didi

scala - 这个操作的好名字是什么?

转载 作者:行者123 更新时间:2023-12-01 11:32:09 25 4
gpt4 key购买 nike

我看到 Scala 标准库缺少获取集合中满足谓词的对象范围的方法:

def <???>(p: A => Boolean): List[List[A]] = {
val buf = collection.mutable.ListBuffer[List[A]]()
var elems = this.dropWhile(e => !p(e))
while (elems.nonEmpty) {
buf += elems.takeWhile(p)
elems = elems.dropWhile(e => !p(e))
}
buf.toList
}

这种方法的好名字是什么?我的实现是否足够好?

最佳答案

我会选择 chunkWithchunkBy

至于您的实现,我认为这需要递归!看看你能不能填这个

@tailrec def chunkBy[A](l: List[A], acc: List[List[A]] = Nil)(p: A => Boolean): List[List[A]] = l match {
case Nil => acc
case l =>
val next = l dropWhile !p
val (chunk, rest) = next span p
chunkBy(rest, chunk :: acc)(p)
}

为什么要递归?它更容易理解算法并且更有可能没有错误(假设没有变量)。

谓词否定的语法 !p 是通过隐式转换实现的

implicit def PredicateW[A](p: A => Boolean) = new {
def unary_! : A => Boolean = a => !p(a)
}

我通常会保留它,因为它非常有用

关于scala - 这个操作的好名字是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13005153/

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