降低
reduce()
,reduceLeft()
和 reduceRight
方法類似於摺疊。傳遞給 reduce 的函式接受兩個值併產生第三個值。在列表上操作時,前兩個值是列表中的前兩個值。然後將函式的結果和列表中的下一個值重新應用於函式,從而產生新的結果。這個新結果將應用列表的下一個值,依此類推,直到沒有更多元素為止。返回最終結果。
val nums = List(1,2,3,4,5)
sum = nums.reduce({ (a, b) => a + b })
println(sum) //prints 15
val names = List("John","Koby", "Josh", "Matilda", "Zac", "Mary Poppins")
def findLongest(nameA:String, nameB:String):String = {
if (nameA.length > nameB.length) nameA else nameB
}
def findLastAlphabetically(nameA:String, nameB:String):String = {
if (nameA > nameB) nameA else nameB
}
val longestName:String = names.reduce(findLongest(_,_))
println(longestName) //prints Mary Poppins
//You can also omit the arguments if you want
val lastAlphabetically:String = names.reduce(findLastAlphabetically)
println(lastAlphabetically) //prints Zac
與摺疊函式相比,reduce 函式的工作方式存在一些差異。他們是:
- reduce 函式沒有初始累加器值。
- 無法在空列表上呼叫 Reduce 函式。
- Reduce 函式只能返回列表的型別或超型別。