我有號碼的列表斯卡拉 - 映射函數來替換與先前數底片在列表
[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