scala教程:实现map()函数(yield)

介绍

在 支持函数式的语言中(如:scala、python、js),一般有 map()函数,或类似功能的函数

作用:

会根据提供的函数对指定集合做映射

参数:

  • 其中一个参数是集合
  • 另一个参数是 lambda表达式,将集合中的每一个元素传给 lambda表达式,计算后返回结果,将结果组合成新集合

应用场景

在 大数据、人工智能中经常使用,对数据做处理

实现 map() 函数

def main(args: Array[String]): Unit = {
  /*
  * 定义map函数
  * 第一个参数是数组
  * 第二个参数是lambda表达式
  */
  def map(arr:Array[Int],op:Int=>Int): Array[Int] = {
    for(item <- arr) yield op(item) //将数组中每一个元素,传给lambda表达式运算,并调用yield返回
  }

  val arr=Array(1,2,3,100,200)
  val res=map(arr, _ * 2)
  println(res.mkString(","))

}

完整代码

package std

object Std33_map函数 {

  def main(args: Array[String]): Unit = {
      //完整写法
//    def map(arr:Array[Int],op:(Int)=> Int) :Array[Int]={
//      for(item <- arr)   yield op(item)
//    }
      //只有一个形参,省略()
//    def map(arr:Array[Int],op:Int=> Int) :Array[Int]={
//      for(item <- arr)   yield op(item)
//    }
    //函数体只有一句,省略{}
//    def map(arr:Array[Int],op:Int=> Int) :Array[Int]=for(item <- arr)   yield op(item)
    //返回类型可推断出,略之
    def map(arr:Array[Int],op:Int=> Int) = for(item <- arr)   yield op(item)

    val arr=Array(1,2,3,4,5)
    //完整写法
//    val res=map(arr,
//
//      (a:Int)=> { //完整写法
//        a * 2
//      }
//
//    )
//    val res=map(arr,

//      (a)=> { //类型可以推断出,所以省略
//        a * 2
//      }
//
//    )

//    val res=map(arr,
//
//      a=> { //只有一个参数,()可省略
//        a * 2
//      }
//
//    )

//    val res=map(arr,
//
//      a=> a * 2 //函数体只有一句,省略{}
//
//    )

    val res=map(arr,
      _ * 2 //外部有省略的 lambda表达式
    )

    println(res.mkString(","))
  }
}

原文出处:/show_1IX1BZCCDov7.html