fold, foldLeft, and foldRight之間的區別
主要的區別是fold函數操作遍歷問題集合的順序。foldLeft是從左開始計算,然後往右遍歷。foldRight是從右開始算,然後往左遍歷。而fold遍歷的順序沒有特殊的次序。
case class Foo(val name: String, val age: String, val sex: String)
Object Test{
def main(args:Array[String]){
val array = ArrayBuffer[Foo]()
array.append(Foo("Hugh Jass", "25", "male"))
array.append(Foo("Biggus Dickus", "43", "male"))
val stringList = array.foldLeft(List[String]()) { (z, f) =>
val title = f.sex match {
case "male" => "Mr."
case "female" => "Ms."
}
z :+ s"$title ${f.name}, ${f.age}"
}
println("stringList:" + stringList(0))
}
}
//伴生類
class Foo(val name: String, val age: Int, val sex: Symbol)
//伴生對象
object Foo {
def apply(name: String, age: Int, sex: Symbol) = new Foo(name, age, sex)
}
Object Test{
def main(args:Array[String]){
val fooList =
Foo("Hugh Jass", 25, 'male) ::
Foo("Biggus Dickus", 43, 'male) ::
Foo("Incontinentia Buttocks", 37, 'female) ::
Nil
val stringList1 = fooList.foldRight(List[String]()) { (z, f) =>
val title = z.sex match {
case 'male => "Mr."
case 'female => "Ms."
}
f :+ s"$title ${z.name}, ${z.age}"
}
println("stringList1:" + stringList1(0))
}
}