當前位置:成語大全網 - 書法字典 - swift的常見高階函數

swift的常見高階函數

看個例子,秒懂。

在本例中,首先使用map轉換數組中的名稱。

轉換成小寫字符串,然後計算它們的字符數。

相似之處:

map和flatMap都可用於可選類型和序列類型(如數組、字典等)。).

差異:

Map變換這個序列的每個元素。

FlatMap將首先展平transform函數的返回類型,然後將其組合成自己的復合類型。

看壹個例子。

註意,上面使用了map和flatMap,轉換的結果返回壹個數組。實際上,s.flatMap(transform)相當於Array(s.map(transform)。已加入())。

Swift4.1的新特性是compactMap

轉換序列的每個元素並返回非零結果。

看壹個例子。

Map返回帶有可選值的nil。

CompactMap返回排除可選值的結果。

如果在類型轉換期間可以更改為可選類型,請使用compactMap,但不要更改為可選類型。直接用flatMap吧。

例如,我們有壹個數組。

當我們要返回每個元素的長度時,轉換時返回的類型是Int?這個時候妳不能保證轉換成功,所以需要使用compactMap。

Filter filter,可以取出數組中符合條件的元素,重新組合成壹個新的數組。

有時我們需要將所有元素的值組合成壹個新值,所以我們使用reduce。

看下面這個例子。

當調用numbers.reduce(_:_:)時,執行以下步驟:

1。用initialresult-0調用nextPartialResult閉包,在本例中-調用numbers的第壹個元素並返回sum:' 1 '。

2。使用前壹個調用的返回重復調用閉包值和序列的每個元素。

3。當序列用完時,它從閉包返回給調用者。

如果序列沒有元素,nextPartialResult和initialResult是調用reduce(_:_:)的結果。

1.合並後的新值可能與原始數組中的元素不同。

2.ruduce還可以實現map和filter,時間復雜度變成O(n)。映射和濾波的原始時間復雜度為O(n*n)。

我們看到SequenceTypes上有那麽多方法和函數,學習是沒有止境的。我們慢慢探索吧。