IOS學(xué)習(xí)高階映射

2020-07-24 14:42 更新

高階映射是學(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)大。


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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)