2013-03-08 5 views
1

У меня есть два разных NSMutabelArray ArrOne и ArrTwo. Letsay ArrOne = A, B, C и D ArrTwo = C, D, X и Y. Поэтому мне нужно проверить, совпадает ли значение ArrTwo с ArrOne и удалить элемент из ArrTwo, если он не такой, как в ArrOne. В этом случае мне нужно удалить X и Y из ArrTwo. Пожалуйста, дайте мне представление.Как проверить значение массива не существует в другом массиве

+1

Где проблема? Не можете ли вы просто пройти через ArrTwo, а затем проверить, есть ли каждый элемент в ArrOne, а если не просто удалить его? – SIGKILL

+0

Попробуйте это [решение] (http://stackoverflow.com/a/15269497/1635315). Это работает для меня. :) – iKT

ответ

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

+0

Это приведет только к возврату значения пересечения. Как я могу узнать, какой из них я должен удалить. – bobShawal

+0

@bobShawal, вы можете использовать '[ArrTwo removeObjectsInArray: [set allObjects]];' после вышеуказанного кода вместо замены. Или еще проверьте ответ, который также будет работать для вас. – iDev

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]; 
Смежные вопросы