从保留排序和所有其他字段中删除NSMutableArray中的重复对象

时间:2016-11-18 13:27:18

标签: ios core-data nsmutablearray nspredicate nsset

对于任何错误,提前道歉的第一个问题。

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

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

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

1 个答案:

答案 0 :(得分:0)

对于您的方法,请使用NSOrderedSet代替NSSet

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

如果您想获得所有字段,只需删除

即可

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

我觉得你的问题是,你实际上在你的Cora数据商店中有重复的条目。