IOS學習高階映射

2020-07-24 14:42 更新

高階映射是學習高階函數(shù)的第一個內(nèi)容。映射能夠把函數(shù)中已經(jīng)存在的一個列表變成另外一個具有相同長度的列表,并且新的列表中的每個值都是與原始列表一一對應的。如下所示是一個平方數(shù)的映射:

map(1,2,3) => (1,4,9)

當然,這只是一個偽代碼,一個高階函數(shù)會返回另外一個函數(shù)而不是一個列表。那么我們要如何利用RXCollections呢?

我們這么來用rx_mapWithBlock:方法:

NSArray * mappedArray = [array rx_mapWithBlock:^id(id each){
    return @(pow([each integerValue],2));
}];

這將會達成上面?zhèn)未a所完成的任務,如果我們打印出array的日志,我們將會看到如下內(nèi)容:

(
    1,
    4,
    9
)

簡直完美!請注意rx_mapWithBlock: 并不是一個真正的函數(shù)映射,因為他不是技術上的高階函數(shù)(她沒有返回一個函數(shù))。后面提到的庫(RAC)已經(jīng)解決了這一點,在下一章我們將看到映射是如何在ReactiveCocoa的上下文中工作的。

注意rx_mapWithBlock:在沒有對原數(shù)組元素進行任何修改的前提下返回了一個新的數(shù)組,這里Foundation的類真的是非常好用的一個例子,因為他們的類默認就是不可變的。

想象一下,往常(命令式編程)為了完成這個任務,我們不得不寫下這樣的代碼:

NSMutableArray *mutableArray = [NSMutableArray arryaWithCapacity:array.count];
for (NSNumber *number in array) [mutableArray addObject:@(pow([number integerValue], 2))];

NSArray *mappedArray = [NSArray arrayWithArray: mutableArray];

代碼顯然更多,而且還有一個無用的局部變量mutableArray污染了我們的作用域,簡直浪費!

所以當你想把一個列表里的元素轉化為另一個列表的元素時,你就能體會到高階映射的強大。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號