gpt4 book ai didi

scala - 如何使用函数式编程返回列表中的所有正数和第一个负数?

转载 作者:行者123 更新时间:2023-12-03 15:08:45 25 4
gpt4 key购买 nike

想象一下,我有一个未排序的正整数和负整数列表。我想返回一个包含所有正整数和第一个负数的列表,然后忽略列表中所有后续的负数,同时保留排序。

当务之急我可以这样做:

l = [1, 2, -4, 5, -6, -1, 3]
out = []
first = true
for n in l:
if n >= 0:
out.push(n)
else if first:
out.push(n)
first = false

// out = [1, 2, -4, 5, 3]

我怎么能用 Scala 中的 FP 做到这一点?我在想(可能不会编译...):
val l = List(1, 2, -4, 5, -6, -1, 3)
val posl = l.map(_ >= 0)
val negl = l.zipWithIndex.map((n, i) => if (n < 0) (i, n) else (None, None)).head
// now split posl at negl._1, and create a new list of leftSlice :: negl._2 :: rightSlice?

这是正确的方法,还是有更优雅、更简洁的方法?

最佳答案

如果没有稍微过于巧妙的递归+模式匹配答案,这将不是一个合适的函数式编程问题。

def firstNegAllPos(l:List[Int]):List[Int] = {
l match{
case x::xs if x>=0 => x::firstNegAllPos(xs)
case x::xs if x<0 => x::xs.filter(_>=0)
case Nil => Nil
}
}

关于scala - 如何使用函数式编程返回列表中的所有正数和第一个负数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27668713/

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