package com.scala.A
import scala.collection.mutable.ArrayBuffer
//----------------------------------------------------------------------------------------------------------------------
/**
* 需求:模拟 Map 映射、Filter 过滤、Reduce 聚合
* */
object scala_function_02 {
def main(args: Array[String]): Unit = {
//----------------------------------------------------------------------------------------------------------------------
/**
* (1)map映射
* 第一个参数为一个Int类型的Array数组,第二个参数为一个函数(Int=>Int),map函数的返回值类型为一个数组(Array[Int])
**/
def map(arr: Array[Int], op: Int => Int) = {
/**
* 函数体为一个for循环
* 将遍历过程中处理的结果返回到一个新 Vector 集合中,使用 yield 关键字。注意:开发中很少使用。
* 此for循环从Array数组中的1开始遍历,遍历1时将1返回到op(1)中,op(1)=1*1=1;遍历2时将2返回到op(2)中,op(2)=2*2=4;
**/
for (elem <- arr) yield op(elem)
}
//----------------------------------------------------------------------------------------------------------------------
/**
* 定义一个结果返回值,将map的值赋值给他
* val result1 = map(Array(1, 2, 3, 4), (x: Int) => {x * x})
* 采取匿名函数简化原则,因为这里变量不止出现过一次,所以不能省略参数名称用下划线代替
**/
val arr = map(Array(1, 2, 3, 4), x => x * x)
/**
* 将arr1结果打印输出,输出类型是是一个Array[Int]集合
* mkString方法,将结果使用逗号进行分割
**/
println(arr.mkString(","))
//----------------------------------------------------------------------------------------------------------------------
/**
* (2)filter 过滤。有参数,且参数再后面只使用一次,则参数省略且后面参数用_表示
* 定义一个filter过滤函数
**/
def filter(arr: Array[Int], op: Int => Boolean) = {
/**
* 定义一个名为arr1、类型为ArrayBuffer[Int]的数组
**/
val arr1: ArrayBuffer[Int] = new ArrayBuffer[Int]()
/**
* 定义一个for循环,遍历arr,if op(1)
* append添加元素到arr1数组(arr1数组的类型为ArrayBuffer)
**/
for (elem <- arr if op(elem)) {
arr1.append(elem)
}
arr1.toArray
}
val arr1 = filter(Array(1, 2, 3, 4), _ % 2 == 1)
println(arr1.mkString(" "))
//----------------------------------------------------------------------------------------------------------------------
/**
* (3)reduce 聚合。有多个参数,且每个参数再后面只使用一次,则参数省略且后面参数用_表示,第 n 个_代表第 n 个参数
**/
def reduce(arr: Array[Int], op: (Int, Int) => Int) = {
var init: Int = arr(0)
/**
* until关键字循环表示从1到arr.length(arr数组长度)-1的范围循环,即前闭后开的循环范围
* */
for (elem <- 1 until arr.length) {
init = op(init, elem)
}
init
}
//val arr2 = reduce(Array(1, 2, 3, 4), (x, y) => x * y)
val arr2 = reduce(Array(1, 2, 3, 4), _ * _)
println(arr2)
//----------------------------------------------------------------------------------------------------------------------
}
}
Scala-模拟 Map 映射、Filter 过滤、Reduce 聚合
最新推荐文章于 2023-03-27 12:03:10 发布