仅保留数组中的唯一值

Cra*_*zed 1 objective-c ios

我有一个字符串数组.我只需保留唯一值,即.我想删除所有复制品.例如:如果数组是{string1,string1,string1,string2,string3,string3},那么最后一个数组应该是{string1,string2,string3}

for(int p = 0; p < [allNewsDates count]; p++)
    {
        NSLog(@"%@",allNewsDates[p]);
        for(int q = p+1; q < [allNewsDates count]; q++)
        {
            NSLog(@"%@   %@",allNewsDates[p],allNewsDates[q]);
            if([allNewsDates[p] isEqualToString:allNewsDates[q]])
            {
                flag = YES;
                t = q;

                break;

            }
        }
        if(flag)
        {
            //[self.date addObject:allDates[p]];


            [allNewsDates removeObjectAtIndex:p];
            NSLog(@"%i",[allNewsDates count]);
        }

        NSLog(@"%i",p);
        flag = NO;
    }
Run Code Online (Sandbox Code Playgroud)

我按照上述步骤从所有日期的数组中提取唯一日期.这通常可行.但问题是:我有一个新闻视图控制器,显示新闻提要.如果用户在那里选择任何新闻,则会将其添加到收藏夹中.如果我一次性选择所有新闻项目,那么收藏夹表格会根据日期显示新闻(不同的日期会出现在5月9日和10日),但如果我添加新闻,请转到收藏夹,然后返回新闻并点击一些新闻项目(例如5月10日)并再次访问收藏夹,然后我将在5月10日两次.我哪里错了?请帮忙!!

Thi*_*ama 6

将您的数组添加到NSSet,就是这样

NSSet *mySet = [[NSSet alloc] initWithArray:allNewsDates];
NSArray *filteredArray = [mySet allObjects];
Run Code Online (Sandbox Code Playgroud)


Mic*_*uba 6

您可以简单地使用KVC集合运算符:

NSArray* uniqueDates = [allNewDates valueForKeyPath:@"@distinctUnionOfObjects.self"] 
Run Code Online (Sandbox Code Playgroud)

更多细节请访问:http://www.nshipster.com/kvc-collection-operators