W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
高階映射是學習高階函數(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
污染了我們的作用域,簡直浪費!
所以當你想把一個列表里的元素轉化為另一個列表的元素時,你就能體會到高階映射的強大。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: