2013-03-08 56 views
1

我有兩個不同的NSMutabelArray ArrOne和ArrTwo。 Letsay ArrOne = A,B,C和D ArrTwo = C,D,X和Y.所以我需要檢查ArrTwo的值是否與ArrOne相同,並且如果它與ArrOne中的ArrTwo不相同,則從ArrTwo中刪除項目。在這種情況下,我必須從ArrTwo中刪除X和Y.請給我一個主意。如何檢查數組值不存在於另一個陣列中

+1

問題在哪裏?難道你不能通過ArrTwo循環,然後檢查每個元素是否在ArrOne中,如果不是,只是刪除它? – SIGKILL 2013-03-08 02:50:14

+0

試試這個[解決方案](http://stackoverflow.com/a/15269497/1635315)。這對我有用。 :) – iKT 2015-12-06 19:58:29

回答

1

我發現了一個解決方案,它的工作原理

for (int i=0; i< arrTwo.count; i++) 
{ 
    if(![arrOne containsObject:[arrTwo objectAtIndex:i]]) 
    { 
     //do action 
     NSLog(@"do delete %@",[arrTwo objectAtIndex:i]); 
    } 
} 

謝謝!

4
NSMutableSet *set = [NSMutableSet setWithArray:arrOne]; 
[set intersectSet:[NSSet setWithAray:arrTwo]; 
return [set allObjects]; 
+0

+1,但你並沒有完全回答這個問題。你需要添加'[ArrTwo removeObjectsInArray:[set allObjects]];'。 – iDev 2013-03-08 03:07:45

+0

這將只返回相交值。我怎麼知道我應該刪除哪一個。 – bobShawal 2013-03-08 03:42:12

+0

@bobShawal,你可以使用'[ArrTwo removeObjectsInArray:[set allObjects]];'在上面的代碼之後而不是替換。或者檢查一下也適用於你的答案。 – iDev 2013-03-08 04:09:55

3

你可以用indexesOfObjectsPassingTest做到這一點,就像這樣:

NSMutableArray *a = [@[@"A",@"B",@"C",@"D"] mutableCopy]; 
    NSMutableArray *b = [@[@"C",@"D",@"X",@"Y"] mutableCopy]; 

    NSIndexSet *indxs = [b indexesOfObjectsPassingTest:^BOOL(NSString *obj, NSUInteger idx, BOOL *stop) { 
     return ![a containsObject:obj]; 
    }]; 

    [b removeObjectsAtIndexes:indxs]; 
相關問題