【问题标题】:Remove duplicate items from array and keep last occurrences - iOS从数组中删除重复项并保留最后一次出现 - iOS
【发布时间】:2016-01-11 07:03:04
【问题描述】:

我有一个数组,如

(一、二、一、二、三、一、三、二)

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

(一、三、二)

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

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

谢谢!

【问题讨论】:

  • 您想处理现有数组还是在向其中添加项目时将数组更新为最终结果更有意义?
  • 使用反向枚举器,处理重复项,然后重新反转处理后的数组。
  • @rmaddy 都可以。
  • 在反转数组上创建有序集?

标签: ios objective-c arrays duplicates nsarray


【解决方案1】:

感谢@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 */

【讨论】:

    【解决方案2】:
    @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
    

    【讨论】:

    • 感谢您的回答,但它没有给出所需的结果。
    猜你喜欢
    • 1970-01-01
    • 2016-10-11
    • 2022-11-19
    • 1970-01-01
    • 2020-12-18
    • 2013-07-10
    • 2021-06-21
    • 2016-09-10
    • 1970-01-01
    相关资源
    最近更新 更多