Scala-map函数,用于用列表中的前一个数字替换负片

Scala-map函数,用于用列表中的前一个数字替换负片,scala,Scala,我有一张号码表 [1,2,3,-1000,4,-1000] 我想写一个map函数,用前面的数字(负数之前)替换列表中的所有负数 在这种情况下,输出将是 [1,2,3,3,4,4] 编写此映射函数的最佳方法是什么 yourList.foldLeft(List[Int]()) { (acc, i) => if (i >= 0) i :: acc else acc.head :: acc }.reverse 如果第一个数字为负数,将引发异常 感谢艾文 def replaceNegativ

我有一张号码表

[1,2,3,-1000,4,-1000]

我想写一个map函数,用前面的数字(负数之前)替换列表中的所有负数

在这种情况下,输出将是

[1,2,3,3,4,4]

编写此映射函数的最佳方法是什么

yourList.foldLeft(List[Int]()) { (acc, i) => if (i >= 0) i :: acc else acc.head :: acc }.reverse
如果第一个数字为负数,将引发异常

感谢艾文

def replaceNegatives(list: List[Int], prev: Int = 0): List[Int] = {
   list match {
     case Nil => Nil
     case (x :: xs) if x < 0 => prev :: replaceNegatives(xs, prev)
     case x :: xs => x :: replaceNegatives(xs, x)
   }
}

第二个参数(
prev
)是可选的;如果列表中的第一项为负数,则使用默认值。

如果第一个数字为负数,会发生什么?第一个数字不会为负数。因此请注意,可能会有连续的负数[1,-1000,-1000]变为[1,1,1]。请注意,将元素添加到列表末尾时,您的方法将花费O(N^2)时间(以及获取最后一个元素)使用O(N)表示
列表
。此外,您正在用负片替换零。再次正确匹配。下次您可以编辑我的帖子:)哦,好吧,现在您太过火了:)这是什么,表演时间?这家伙可能只是想把作业做完。这就意味着我该睡觉了。你的方法不是尾部递归的,所以它会在大量输入时失败。
scala> replaceNegatives(List(1, 2, 3, -1000, 4, -1000))
res1: List[Int] = List(1, 2, 3, 3, 4, 4)