Swift文法-高階函數_Swift基礎

來源:互聯網
上載者:User

     高階函數map,flatMap,reduce,filter可以簡化代碼量, 能用就用。


1、 map函數, 是集合和String類的執行個體方法, 作用是遍曆時修改item;map並不會修改執行個體值, 而且建立一個拷貝。

摘自官方文檔:

let cast = ["Vivien", "Marlon", "Kim", "Karl"]let lowercaseNames = cast.map { $0.lowercased() }// 'lowercaseNames' == ["vivien", "marlon", "kim", "karl"]let letterCounts = cast.map { $0.count }// 'letterCounts' == [6, 6, 3, 4]

再舉2個例子說明: 1、將Int數群組轉換為String數組, 即map支援轉換數組參數類型;

2、偶數乘以10,測試遍曆時添加自訂邏輯;

    let array = [1, 2, 3]    let str1 = array.map({ "$\($0)"}) //數組每個元素轉成String類型    let str2 = array.map{ param -> Int in   //遍曆時可以添加條件判斷邏輯        if param%2 == 0 {            return param * 10  //偶數乘以10        } else {            return param        }    }    print(array) //[1 2 3]    print(str1)  //[“$1","$2","$3"]    print(str2)  //[1,20,3]

2、flatMap, 功能跟map類似; 區別是flatMap會過濾nil元素, 並解包Optional。

樣本:


      arr1包含5個值, arr4包含4個值。

      

      flatMap還可以將多維陣列轉換為一維數組;


     對於N維數組, map函數仍然返回N維數組。 

    PS: arr數組裡包含3個元素, map迴圈了4次。


3、 filter函數, 顧名思義就是過濾出合格元素。



4、reduce函數, 它可以使用2個參數即$0和$1, 而前3個函數只能使用一個參數$0。

     reduce可以實現求和, 或篩選出符合條件記錄計算總和。



高階函數還可以鏈式使用(多級):

    let array = [1, 2, 3, 4, 5]    let sum0 = array.filter{ $0 > 2}.reduce(0, +)    print(sum0)  //12
     求數組裡大於2的值之和。


組合調用:

      找出二維數組中所有的偶數。

let array = [[1,2,3], [4,5,6], [7,8,9] ]let even = array.flatMap {      $0.filter { $0%2 == 0}}print(even)  //[2,4,6,8]

       如果使用基本二維數組遍曆的文法就比較麻煩了:

//基本的二維數組遍曆var evenArr = [Int]()for arr in array {    for item in arr {        if item % 2 == 0 {            evenArr.append(item)        }    }}print(evenArr)







相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.