我有一个数字列表
[1,2,3,-1000,4,-1000]
我想写一个map函数来替换列表中的所有负数与前一个数字(在否定之前)
在这种情况下,输出将是
[1,2,3,3,4,4]
编写此地图功能的最佳方法是什么?
答案 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
)是可选的;如果列表中的第一项是否定的,则使用默认值。