gpt4 book ai didi

scala - 如何根据特定条件优雅地提取列表范围?

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

我想从列表中提取一系列元素,满足以下要求:

  • 范围的第一个元素必须是匹配特定条件的元素之前的元素
  • 范围的最后一个元素必须是与特定条件匹配的元素的下一个元素
  • 示例:对于列表 (1,1,1,10,2,10,1,1,1) 和条件 x >= 10 我想得到 (1,10,2, 10,1)

命令式编程非常简单,但我只是想知道是否有一些智能的 Scala 函数式方法来实现它。是吗?

最佳答案

将其保存在 scala 标准库中,我将使用递归解决此问题:

def f(_xs: List[Int])(cond: Int => Boolean): List[Int] = {
def inner(xs: List[Int], res: List[Int]): List[Int] = xs match {
case Nil => Nil
case x :: y :: tail if cond(y) && res.isEmpty => inner(tail, res ++ (x :: y :: Nil))
case x :: y :: tail if cond(x) && res.nonEmpty => res ++ (x :: y :: Nil)
case x :: tail if res.nonEmpty => inner(tail, res :+ x)
case x :: tail => inner(tail, res)
}

inner(_xs, Nil)
}

scala> f(List(1,1,1,10,2,10,1,1,1))(_ >= 10)
res3: List[Int] = List(1, 10, 2, 10, 1)

scala> f(List(2,10,2,10))(_ >= 10)
res4: List[Int] = List()

scala> f(List(2,10,2,10,1))(_ >= 10)
res5: List[Int] = List(2, 10, 2, 10, 1)

也许在这个解决方案中有一些我没有想到的东西,或者我误解了一些东西,但我想你会明白基本的想法。

关于scala - 如何根据特定条件优雅地提取列表范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18783147/

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