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))
}
}