2014-05-21 30 views
-2

我想使用的基本目標C stament for (id object in collection)與多個對象和條件是這樣的:對於具有多個在

for (Origin *origin in [self.fetchedOriginController fetchedObjects] AND Destiny *destiny in [self.fetchedDestinyController fetchedObjects])) 
{ 
NSLog(@"This route starts from %@ and ends in %@, origin.name, destiny.name);  
} 

所以日誌將是:

This route starts in London and ends in Sidney 
This route starts in Madrid and ends in Barcelona 
This route starts in Washington and ends in Vienna 
(...) 

怎麼可以這樣做?

+2

究竟該循環的期望行爲是什麼?儘管兩個集合同時循環?如果其中一個集合用完了,會有什麼行爲? –

+0

這是在其他語言,@JoachimIsaksson(有時候該死的方便),行之有效的行爲; Lisp有''mapcar'](http://stackoverflow.com/a/6195809/),Python和Ruby有['zip()'](https://bradmontgomery.net/blog/2013/04/01/蟒拉鍊-MAP-和拉姆達/)。當其中一個列表用完時,迭代停止。我見過Cocoa,IIRC至少有兩個「壓縮」的第三方實現。 –

+0

@JoshCaswell據我所知,它至少可以是zip,zip_longest或交叉連接,這就是爲什麼我要求澄清。 –

回答

3

如果您正在尋找所有的組合只是窩:

for (object in collection) 
{ 
    for (object2 in collection2) 
    { 
     ... 
    } 
} 

或者,您從兩個相同大小的集合尋找對的對象?如果是這樣創建一個循環提供索引:

NSUInteger count = collection.count; 
for (NSUInteger ix = 0; ix < count; ix++) 
{ 
    id object = collection[ix]; 
    id object2 = collection2[ix]; 

    ... 
} 

如果你要循環共同對兩個不同尺寸的集合只是改變的第一行:

NSUInteger count = MIN(collection.count, collection2.count); 

如果你想要別的東西編輯你的問題更加明確。

1

像這樣的事情會爲你想我想工作:

for (NSUInteger i = 0; i < collection1.count; i++) { 

    id object1 = collection1[i]; 
    id object2 = collection2[i]; 
    // continue ... 

} 

據我所知,有沒有內置的語法做什麼你問。

此解決方案假設collection1collection2具有相同數量的對象,或至少collection2不超過collection1的數量。考慮到你想要的語法,我想你已經計劃好了,我只是想提一下它,以防其他人絆倒在這裏。

+0

理想情況下'i'應該是'NSUInteger',而不是'int'。 – rmaddy

+0

@rmaddy - 已更新。 – Logan

0

你認爲這個枚舉發生在什麼順序?你在尋找什麼樣的每個收藏品之間的關聯?

如果你想從collection採取每個object,做一些既該對象,並在collection2每個object2,使用嵌套循環:如果你想通過兩個集合,以便

for (object in collection) { 
    for (object2 in collection2) { 
     // ... 
    } 
} 

,使用兩個循環。

for (object in collection) { /* ... */ } 
for (object2 in collection2) { /* ... */ } 

如果你希望在collectioncollection2某種物體之間的映射(其中假定它們具有相同的count並且它們中的至少一個具有獨特的條目),你可能會尋找到一個數據結構,捕獲映射。然後你可以迭代成對。

NSDictionary *dictionary = [NSDictionary dictionaryWithObjects:collection2 forKeys:collection]; 
[dictionary enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop){ 
    // ... 
}];