2014-12-01 3 views
0

Прежде всего, я много искал, но все методы, похоже, для примитивов или для целых пользовательских объектов.Удаление повторяющихся пользовательских объектов из двух массивов и их объединение

Мое положение это. У меня есть пользовательские объекты типа в двух разных массивах. Однако поля каждого отдельного объекта сильно отличаются друг от друга, за исключением только двух полей.

Я хочу объединить оба этих массива, а затем удалить дубликаты только для этих двух полей. Как я могу это сделать. Мой код до сих пор

NSMutableArray* testArray = [eventHandler returnAllEvents]; 
    NSMutableArray* combinedArray = [[NSMutableArray alloc]init]; 
    NSArray* finalArray = [[NSArray alloc]init]; 
    if (testArray.count==0) { 
     for (int i = 0; i<facebookData.count; i++) { 
      LSEvent* event = [facebookData objectAtIndex:i]; 
      [combinedArray addObject:event]; 
     } 
     finalArray = [combinedArray arrayByAddingObjectsFromArray:calendarData]; 
    } 
    NSMutableArray *uniqueArray = [NSMutableArray array]; 
    NSMutableSet *names = [NSMutableSet set]; 
    for (id obj in finalArray) { 
     NSString *destinationName = [obj destinationname]; 
     if (![names containsObject:destinationName]) { 
      [uniqueArray addObject:obj]; 
      [names addObject:destinationName]; 
     } 
    } 
+0

Какие из этих массивов являются 2 массива вы хотели бы объединить и какой массив вы положить результат в? –

+0

В принципе, вы должны просто игнорировать этот код, поскольку это была незавершенная работа. Я просто искал алгоритм в соответствии с ситуацией. –

+1

Как бы вы определили, какой из дубликатов удалить, если все, кроме двух полей, отличается? –

ответ

0

Вы можете сделать STH как этот

NSArray first = ... 
NSMutableArray second = ... // this will be combine array 

for (id someObj in first) { 
    if ([second filteredArrayUsingPredicate:[self predicateForObject:someObj ]].count == 0){ 
     [second addObject: someObj]; 
    } 
} 
0

Если вы хотите, чтобы проверить, что объект существует в массиве с помощью containsObject: вам нужно реализовать - (BOOL) IsEqual: (ID) другой в пользовательском объекте.

- (BOOL)isEqual:(id)other { 
    if (other == self) { 
     return YES; 
    } 
    if (!other || ![other isKindOfClass:[self class]]) { 
     return NO; 
    } 
    if (self.identifier == other.identifier) { 
     return NO; 
    } 
    return YES; 
} 
Смежные вопросы