W3Cschool
恭喜您成為首批注冊(cè)用戶(hù)
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
高階映射是學(xué)習(xí)高階函數(shù)的第一個(gè)內(nèi)容。映射能夠把函數(shù)中已經(jīng)存在的一個(gè)列表變成另外一個(gè)具有相同長(zhǎng)度的列表,并且新的列表中的每個(gè)值都是與原始列表一一對(duì)應(yīng)的。如下所示是一個(gè)平方數(shù)的映射:
map(1,2,3) => (1,4,9)
當(dāng)然,這只是一個(gè)偽代碼,一個(gè)高階函數(shù)會(huì)返回另外一個(gè)函數(shù)而不是一個(gè)列表。那么我們要如何利用RXCollections呢?
我們這么來(lái)用rx_mapWithBlock:方法:
NSArray * mappedArray = [array rx_mapWithBlock:^id(id each){
return @(pow([each integerValue],2));
}];
這將會(huì)達(dá)成上面?zhèn)未a所完成的任務(wù),如果我們打印出array
的日志,我們將會(huì)看到如下內(nèi)容:
(
1,
4,
9
)
簡(jiǎn)直完美!請(qǐng)注意rx_mapWithBlock:
并不是一個(gè)真正的函數(shù)映射,因?yàn)樗皇羌夹g(shù)上的高階函數(shù)(她沒(méi)有返回一個(gè)函數(shù))。后面提到的庫(kù)(RAC)已經(jīng)解決了這一點(diǎn),在下一章我們將看到映射是如何在ReactiveCocoa的上下文中工作的。
注意rx_mapWithBlock:
在沒(méi)有對(duì)原數(shù)組元素進(jìn)行任何修改的前提下返回了一個(gè)新的數(shù)組,這里Foundation的類(lèi)真的是非常好用的一個(gè)例子,因?yàn)樗麄兊念?lèi)默認(rèn)就是不可變的。
想象一下,往常(命令式編程)為了完成這個(gè)任務(wù),我們不得不寫(xiě)下這樣的代碼:
NSMutableArray *mutableArray = [NSMutableArray arryaWithCapacity:array.count];
for (NSNumber *number in array) [mutableArray addObject:@(pow([number integerValue], 2))];
NSArray *mappedArray = [NSArray arrayWithArray: mutableArray];
代碼顯然更多,而且還有一個(gè)無(wú)用的局部變量mutableArray
污染了我們的作用域,簡(jiǎn)直浪費(fèi)!
所以當(dāng)你想把一個(gè)列表里的元素轉(zhuǎn)化為另一個(gè)列表的元素時(shí),你就能體會(huì)到高階映射的強(qiáng)大。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話(huà):173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: