37.List的foldLeft、foldRight、sort操作代码实战

来源:互联网 发布:matlab求解非线性优化 编辑:程序博客网 时间:2024/06/07 23:44


def main(args: Array[String]): Unit = {    println((1 to 100).foldLeft(0)(_ + _))  //初始值为0,从1一直加到100    println(( 0 /: (1 to 100) ) (_ + _))        println((1 to 5).foldRight(100) (_ - _))  //初始值为100,1-100=-99,2-(-99)=101,3-101= -98, 4-(-98)=102,5-102=-97    println( ((1 to 5) :\ 100) (_ - _) )        println(List(1,-3,4,2,6) sortWith(_ < _))  //从小到大排序    println(List(1,-3,4,2,6) sortWith(_ > _))  //从大到小排序  }

输出:

5050
5050
-97
-97
List(-3, 1, 2, 4, 6)
List(6, 4, 2, 1, -3)


源码:

  def /:[B](z: B)(op: (B, A) => B): B = foldLeft(z)(op)  def :\[B](z: B)(op: (A, B) => B): B = foldRight(z)(op)  def foldLeft[B](z: B)(op: (B, A) => B): B = {    var result = z    this foreach (x => result = op(result, x))    result  }  def foldRight[B](z: B)(op: (A, B) => B): B =    reversed.foldLeft(z)((x, y) => op(y, x))


参考资料来源于大数据梦工厂 深入浅出scala 第37讲 由王家林老师讲解


原创粉丝点击