Scala語言之高階函數(4)

==> 經常使用函數講解
數組

        ---> 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 的元素ide

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    將符合過濾規則的元素放在一個分區,將不符合過濾規則的放在別一個分區spa

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   找到列表中第一個符合規則的元素scala

        ---> flatten  壓平操做,將三維數組轉化成二維數組或將二維數組轉化爲一維數組,須要注意的是,轉化時必須保證每一個元素還可以再進行提取,不然會報錯orm

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 兩個功能的結合體ip

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)



==> 閉包    函數的嵌套ci

        ---> 定義普通函數: 數學

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
相關文章
相關標籤/搜索