在本例中,首先使用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上有那麽多方法和函數,學習是沒有止境的。我們慢慢探索吧。