2013-05-10 85 views
1

我有一个字符串数组。我只需要保留唯一的值,即。我想删除所有重复。例如:如果数组{字符串1,字符串1,字符串1,字符串,STRING3,STRING3}那么最终阵列应采用{字符串1,字符串,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日收到两次。我哪里错了?请帮忙!!

+1

值添加到一个NSSet中然后将它们复制出来。套件不允许重复。 – 2013-05-10 11:53:02

+0

感谢大家的回复.. – 2013-05-10 15:09:25

回答

6

您可以简单地使用KVC收集运营商:

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

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

+0

梦幻般......作品像一个魅力!万分感谢!!! – 2013-05-10 14:47:13

6

您的阵列添加到的NSSet,那它

NSSet *mySet = [[NSSet alloc] initWithArray:allNewsDates]; 
NSArray *filteredArray = [mySet allObjects]; 
+1

为什么可变吗?如果你展示了如何将值复制回数组,那么你还有我的投票权。 – 2013-05-10 11:55:08

+0

我只是把可变部分,如果他要添加更多的字符串,这将是有益的。 :)无论如何Thankz – 2013-05-10 12:00:16

+0

完全工作感谢你比'distinctUnionOfObjects.self'更好# – 2015-08-13 15:37:49

3
NSSet *uniqueStates = [NSSet setWithArray:yourArray]; 
NSArray *arr = [uniqueStates allObjects]; 
0

这里是去除NSMutable Array..it重复值会为你工作的代码。 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 
}