2015-09-23 5 views
1

Я хотел бы удалить каждый объект из array. Это значение для ключа name можно найти в array2. Я пробовал это с помощью цикла, но, к сожалению, моя реализация не сработала, операторы if и else выходили из всех объектов.Как удалить объекты из массива на основе объекта другого массива

Это то, что я хотел бы достичь:

NSArray *array = @[ 
         @{ 
          @"type" : @"2", 
          @"name" : @"apple" 
          }, 
         @{ 
          @"type" : @"1", 
          @"name" : @"peanut" 
          }, 
         @{ 
          @"type" : @"3", 
          @"name" : @"orange" 
          }, 
         @{ 
          @"type" : @"1", 
          @"name" : @"cheese" 
          }, 
         ]; 

NSArray *array2 = @[ 
        @{ 
         @"type" : @"2", 
         @"name" : @"apple" 
         }, 
        @{ 
         @"type" : @"1", 
         @"name" : @"cheese" 
         }, 
        @{ 
         @"type" : @"3", 
         @"name" : @"orange" 
         }, 
        ]; 


// new array from array and array2, that contains the unique objects from array 

NSArray *newArray = @[ 

        @{ 
         @"type" : @"1", 
         @"name" : @"peanut" 
         }, 

        ]; 

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

Это то, что мы пытались:

NSMutableArray *newArray = [self.array1 mutableCopy]; 

for (PFObject * object in newArray) { 

    PFObject *placeholderObject = object; 

    for (PFObject *object2 in self.array2) { 

     if ([placeholderObject[@"name"] isEqualToString:object2[@"name"]]) { 

      [self.array1 removeObject:object]; 

      NSLog (@"EXISTING OBJECT FOUND %@", object); 
     } else { 


      NSLog(@"UNIQUE OBJECT FOUND %@", idO[@"hirCime"]); 

     } 


    } 


} 
+1

Почему бы вам не добавить еще один ключ называется идентификатор и дать уникальный номер, так что вы можете сравнить этот уникальный номер удалите объекты. Иначе вы должны сравнить два ключа, что более сложно !!! –

+1

Существует метод containsObject: метод, который вы можете использовать для сравнения объектов между двумя массивами. –

+0

@MSU_Bulldog. Я попытался containsObject и не работал с ключевыми значениями объекта. – rihe

ответ

2
NSMutableArray *arr = [NSMutableArray arrayWithArray:array]; 
for (NSDictionary *objDic1 in array) { 
    for (NSDictionary *objDic2 in array2) { 
     if ([objDic1[@"name"] isEqualToString:objDic2[@"name"]]) { 
      [arr removeObject:objDic1]; 
     } 
    } 
} 
NSArray *resultArr = (NSArray*)arr; 
2

Это можно сделать путем удаления элементов, если вы хотите, но вы должны убедиться, что вы не мутирует массив, как вы итерацию через него. Вот пример (на основе NSDictionary, а не PFObject ... но похоже логика):

NSMutableArray *newArray = [array1 mutableCopy]; 
for (NSDictionary * object in array1) { 
    NSDictionary *placeholderObject = object; 
    for (NSDictionary *object2 in array2) { 
     if ([placeholderObject[@"name"] isEqualToString:object2[@"name"]]) { 
      [newArray removeObject:object]; 
      NSLog (@"EXISTING OBJECT FOUND %@", object); 
      break; 
     } else { 
      NSLog(@"UNIQUE OBJECT FOUND %@", object); 
     } 
    } 
} 
+0

Как вы думаете, было бы лучше сделать это, добавив уникальные объекты в другой массив? Я бы хотел сделать самую эффективную версию. – rihe

+0

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

Смежные вопросы