1

我有一个字符串数组。我只需要保留唯一值,即。我想删除所有重复。例如:如果数组是 {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;
    }

我正在按照上述过程从所有日期的数组中提取唯一日期。这通常可以正常工作。但问题是这样的:我有一个显示新闻提要的新闻视图控制器。如果用户在那里选择任何新闻,它就会被添加到收藏夹中。如果我一口气选择了所有新闻项目,那么收藏夹表会根据日期显示新闻(不同的日期出现一次,比如 5 月 9 日和 10 日),但是如果我添加新闻,则转到收藏夹,然后返回新闻并单击一些新闻项目(例如 5 月 10 日)并再次访问收藏夹,然后我会两次获得 5 月 10 日。我哪里错了?请帮忙!!

4

4 回答 4

6

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

NSSet *mySet = [[NSSet alloc] initWithArray:allNewsDates];
NSArray *filteredArray = [mySet allObjects];
于 2013-05-10T11:54:21.407 回答
6

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

NSArray* uniqueDates = [allNewDates valueForKeyPath:@"@distinctUnionOfObjects.self"] 

更多细节在这里:http ://www.nshipster.com/kvc-collection-operators

于 2013-05-10T12:43:31.993 回答
3
NSSet *uniqueStates = [NSSet setWithArray:yourArray];
NSArray *arr = [uniqueStates allObjects];
于 2013-05-10T11:56:33.930 回答
0

这是从 NSMutable Array 中删除重复值的代码。它会为您工作。myArray 是您要删除重复值的可变数组。

for(int j = 0; j < [myArray count]; j++){
    for(int k = j+1;k < [myArray count];k++){
        NSString *str1 = [myArray objectAtIndex:j];
        NSString *str2 = [myArray objectAtIndex:k];
        if([str1 isEqualToString:str2])
            [myArray removeObjectAtIndex:k];
       }
}

或者您可以使用:

NSSet 完全符合您的要求:它是唯一项的(无序)集合。因此,您可以像这样在数组中找到唯一项:

NSSet *uniqueElements = [NSSet setWithArray:myArray];
// iterate over the unique items
for(id element in uniqueElements) {
  // do something
}
于 2013-05-10T11:58:54.330 回答