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

时间:2015-10-22 20:52:40

标签: scala

我有一个数字列表

  

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

我想写一个map函数来替换列表中的所有负数与前一个数字(在否定之前)

在这种情况下,输出将是

  

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

编写此地图功能的最佳方法是什么?

2 个答案:

答案 0 :(得分:4)

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

将抛出异常。

感谢Aivean。

答案 1 :(得分:1)

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)
   }
}

示例:

scala> replaceNegatives(List(1, 2, 3, -1000, 4, -1000))
res1: List[Int] = List(1, 2, 3, 3, 4, 4)

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