我有一个字符串数组。我只需保留唯一值,即。我想删除所有复制品。例如:如果数组是{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日两次收到。我哪里错了?请帮忙!!
答案 0 :(得分:6)
将您的数组添加到 NSSet ,就是这样
NSSet *mySet = [[NSSet alloc] initWithArray:allNewsDates];
NSArray *filteredArray = [mySet allObjects];
答案 1 :(得分:6)
您可以简单地使用KVC集合运算符:
NSArray* uniqueDates = [allNewDates valueForKeyPath:@"@distinctUnionOfObjects.self"]
答案 2 :(得分:3)
NSSet *uniqueStates = [NSSet setWithArray:yourArray];
NSArray *arr = [uniqueStates allObjects];
答案 3 :(得分: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
}