удалить повторяющийся объект из NSMutableArray с сохранением сортировки и всех других полей

это мой первый вопрос для заранее извинений за любую ошибку.

Мой вопрос: удалить повторяющееся значение, сохранив тот же порядок, что и массив. Как и мой формат массива: -

(   
   {
       author = "";
       content = "After almost";
       "document_name" = "20150108";
       "news_id" = 280;
   },
     {
       author = "";
       content = "Content";
       "document_name" = "20150108"
       "news_id" = 282;
     }
); 

На самом деле я получаю этот массив из Core Data, и я знаю о SetPropertiesToFetch, например: -

[request setResultType:NSDictionaryResultType];
[request setReturnsDistinctResults:YES];
[request setPropertiesToFetch:@[@"news_id"]];

но из этого я получаю только поле news_id, но мне нужны и все остальные поля. также я знаю о NSSet

NSArray *arrayWithNoDuplicates = [[NSSet setWithArray:papersObject.paperSubject] allObjects];

из-за этого я потерял свой порядок сортировки, который я сделал в предикате.

и во время поиска я нашел enumerateObjectsUsingBlock

NSMutableArray *filteredManagers = [NSMutableArray array];
  [managers enumerateObjectsUsingBlock:^(Manager manager, NSUInteger idx, BOOL stop) {
    if (![filteredManagers containsObject:manager]) {
      [filteredManagers addObject:manager];
    }
  }];

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

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


person Deepak Bhati    schedule 18.11.2016    source источник


Ответы (1)


Для вашего подхода используйте NSOrderedSet вместо NSSet:

NSArray *arrayWithNoDuplicates = [NSOrderedSet orderedSetWithArray:papersObject.paperSubject].array;

Если вы хотите получить все поле, просто удалите

[request setPropertiesToFetch:@[@"news_id"]];

Мне кажется, ваша проблема заключается в том, что на самом деле у вас есть повторяющиеся записи в вашем хранилище данных Cora Data.

person shallowThought    schedule 18.11.2016
comment
Однако ваша фактическая проблема (повторяющиеся записи) сохраняется. - person shallowThought; 18.11.2016