从数组中删除重复的项目并保留最后一次出现 - iOS

时间:2016-01-11 07:03:04

标签: ios objective-c arrays duplicates nsarray

我有一个数组,如

(一,二,一,二,三,一,三,二)

我想删除重复项,并仅保留最后一次出现的项目。我的结果数组应该是:

(一,三,二)

我通过[NSOrderedSet orderedSetWithArray:array]删除了重复项,但这样可以保留第一次出现的项目。它给出的结果是(一,二,三),即第一指数,第二指数和第五指数。

如何才能保留最后一次出现,所以我的结果应该是第6个索引,第7个索引和第8个索引?

谢谢!

2 个答案:

答案 0 :(得分:2)

感谢正确的方向@Avi和@Cristik(问题的评论者),实施了以下解决方案及其工作:

NSMutableArray *array = [NSMutableArray arrayWithCapacity:[originalArray count]];
NSEnumerator *enumerator = [originalArray reverseObjectEnumerator];

for (id element in enumerator) 
{
   [array addObject:element];
}

NSOrderedSet *orderedSet =  [NSOrderedSet orderedSetWithArray:array];

/* orderedSet now has has the desired result */

答案 1 :(得分:0)

@implementation NSArray (Extended)

- (NSArray *)arrayByRemovingDuplicatesMaintainingOrder
{
    NSMutableSet *arrayObjects = [NSMutableSet set];
    NSMutableArray *result = [NSMutableArray array];

    for (id obj in self)
    {
        if (![arrayObjects containsObject:obj])
        {
            [result addObject:obj];
            [arrayObjects addObject:obj];
        }
    }

    return result;
}

@end