我有一个数字列表
[1, 2, 3, -1000, 4, -1000]
我想编写一个map函数,将列表中所有的负数替换为前一个数(负数之前的数)
在这种情况下,输出将是
[1, 2, 3, 3, 4, 4]
编写这个map函数的最佳方法是什么?
我有一个数字列表
[1, 2, 3, -1000, 4, -1000]
我想编写一个map函数,将列表中所有的负数替换为前一个数(负数之前的数)
在这种情况下,输出将是
[1, 2, 3, 3, 4, 4]
编写这个map函数的最佳方法是什么?
yourList.foldLeft(List[Int]()) { (acc, i) => if (i >= 0) i :: acc else acc.head :: acc }.reverse
如果第一个数字为负数,将会抛出异常。
感谢Aivean提供的帮助。
List
来说需要O(N)的时间。 - Aiveandef 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
) 是可选的;如果列表中的第一个项目为负数,则使用它作为默认值。