【问题标题】:Remove duplicates from large NSMutableArray从大型 NSMutableArray 中删除重复项
【发布时间】:2015-01-19 16:47:50
【问题描述】:

我有一个大型可变数组,其中包含许多按字母顺序排列的重复值。

我需要能够将我的数组 *Array 转换为一个新数组,其中包含每个字符串变体的一个条目。

我目前正在使用:

NSArray *array = [NSArray arrayWithObjects:papersObject.paperSubject, nil];

NSCountedSet *paperSet = [[NSCountedSet alloc] initWithArray:array];
NSMutableArray *namesArray = [[NSMutableArray alloc] initWithCapacity:[array count]];

[namesSet enumerateObjectsUsingBlock:^(id obj, BOOL *stop){
    if ([paperSet countForObject:obj] == 1) {
        [namesArray addObject:obj];
    }
}];

NSLog(@"%@", namesArray);

但这会返回相同数组的长列表,但仍有重复项。

有什么想法吗?

【问题讨论】:

标签: ios objective-c arrays xcode cocoa-touch


【解决方案1】:

怎么样:

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

【讨论】:

  • 这样会失去原数组的顺序。
  • 当然,但他没有说他需要维持秩序。为了维持秩序,只需使用NSOrderedSet
  • 就是我写的。看我的回答。
【解决方案2】:

A.什么是名称集?纸集?

B.然而:

NSOrderedSet *set = [NSOrderedSet orderedSetWithArray:array];
NSArray *arrayWithUniquesIsAnOrderedSet = set.array;

顺便说一句:我强烈建议使用有序集而不是数组,因为具有唯一对象的数组一个有序集。

【讨论】:

  • 也许您的意思是“具有唯一对象的 有序 数组是(类似于)有序集”?
  • 不,数组总是通过它的索引来排序的。 “有序”并不意味着“排序”。有序只是意味着你有“下一个”和“上一个”的概念。
  • 抱歉,我的错误 - 正如您正确指出的那样,NSOrderedSet 确实按位置而不是按元素排序。
猜你喜欢
  • 2011-08-24
  • 1970-01-01
  • 2013-04-17
  • 2013-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-24
相关资源
最近更新 更多