我有号码的列表斯卡拉 - 映射函数来替换与先前数底片在列表
[1,2,3,-1000,4,-1000]
我想写一个地图功能与之前的数(前负)
在这种情况下,以取代在我的列表中的所有负数输出将是
[1,2,3,3,4,4]
写这个map函数的最好方法是什么?
我有号码的列表斯卡拉 - 映射函数来替换与先前数底片在列表
[1,2,3,-1000,4,-1000]
我想写一个地图功能与之前的数(前负)
在这种情况下,以取代在我的列表中的所有负数输出将是
[1,2,3,3,4,4]
写这个map函数的最好方法是什么?
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
)是可选的;如果列表中的第一个项目是负数,则它是默认值。
你的方法不是尾递归的,所以它在大输入时会失败。 – Aivean
当心Aivean! –
如果第一个数字是负数应该发生什么? – Lee
首先数目将不会被负 – ZhongBot
另外注意,可以是连续的底片 [1,-1000,-1000] 变为 [1,1,1] – ZhongBot