Scala語言之高階函數(4)
阿新 • • 發佈:2018-02-20
ron 個數 處理 組合 元素 二維 spa toolbar 理解 ==> 常用函數講解
---> map 作用於列表中的每一個元素
// 定義一個列表 val list= List(1,2,3,4,5,6,7,8,9) // list 列表中的所有元素乘以2 list.map((i:Int) => i*2) // 使用 foreach 做相同的操作,foreach 不會返回值 list.foreach((i:Int) => i*2)
---> filter 過濾返回值為 False 的元素
val list = List(1,2,3,4,5,6,7,8,9) list.filter((i:Int) => i%2==0) // 返回結果為:List[Int] = List(2, 4, 6, 8) // 還可寫作 num.filter(_%2==0)
---> zip 將兩個數組合並
List(1,2,3).zip(List(4,5,6)) // 輸出結果為 List[(Int, Int)] = List((1,4), (2,5), (3,6))
---> partition 將符合過濾規則的元素放在一個分區,將不符合過濾規則的放在別一個分區
List(1,2,3,4,5,6,7,8,9).partition((i:Int) => i%2==0) // 輸出結果為:(List[Int], List[Int]) = (List(2, 4, 6, 8),List(1, 3, 5, 7, 9))
---> find 找到列表中第一個符合規則的元素
---> flatten 壓平操作,將三維數組轉化成二維數組或將二維數組轉化為一維數組,需要註意的是,轉化時必須保證每個元素還能夠再進行提取,否則會報錯
List(List(1,List(2,3,4)), List(List(5,6,7),List(8,9))).flatten // 如果要繼續進行壓平操作,剛會報錯 List(List(1,List(2,3,4)), List(List(5,6,7),List(8,9))).flatten.flatten error: <console>:12: error: No implicit view available from Any => scala.collection.GenTraversableOnce[B]. List(List(1,List(2,3,4)), List(List(5,6,7),List(8,9))).flatten.flatten // 若要繼續壓平操作,需將處理處理修改一下 List(List(List(1),List(2,3,4)), List(List(5,6,7),List(8,9))).flatten.flatten // 結果為:List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9)
---> flatMap 相當於 Map 與 flatten 兩個功能的結合體
val list = List(List(1,2,3),List(4,5,6)) // 此處的 x 相當於將源數據 flatten 壓平後得到的結果,然後對每個元素進行操作 list.flatMap(x=>x.map(_*2)) // 此條語句等價於以下兩步操作 val x = list.flatten x.map(_*2)
==> 閉包 函數的嵌套
---> 定義普通函數:
def myfun(x:Int, y:Int):Int = x * y
---> 采用閉包
// 定義一個閉包函數,其中,x 為乘數因子,即:乘以的倍數(我自己理解為被乘數),y 是使用函數傳入的參數 def myfun(x:Int)=(y:Int) => x * y // 第一步先定義自己函數的模型 val mytest = myfun(2) // 使用自己定義好的函數模型,傳入參數 mytest(20)
==> 柯裏化 一個數學家的名子,其本質是將一個多參數函數轉換成函數鏈,每個節點上都有一個單一參數的函數
舉例:
def add(x:Int, y:Int):Int = x + y def add(x:Int)(y:Int) = x + y
Scala語言之高階函數(4)