使用保持排序和所有其他字段从 NSMutableArray 中删除重复对象

remove Duplicate Object from NSMutableArray with keep sorting and all other fields

这是我的第一个问题,如有任何错误,请提前致歉。

我的问题是删除重复值并保持数组具有的相同顺序。 就像我的数组格式是:-

(   
   {
       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循环和块之间没有太大区别。所以我不能使用它,因为我有数以千计的数据并且将循环用于检查并从数组中删除数据是不好的。

所以任何人都知道删除重复对象并与字典中的所有其他字段保持排序的更好解决方案,请告诉我。

对于您的方法,请使用 NSOrderedSet 而不是 NSSet

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

如果要获取所有字段,只需删除

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

你的问题在我看来,你实际上 在你的 Cora 数据存储中有重复条目。