2009-12-07 72 views
1

即时扫描使用NSMutableArray的无线信息删除重复值,但也有少数重复的值出现,所以我尝试使用下面的代码,但仍然得到重复值,如何在NSMutableArray中

if([scan_networks count] > 0) 
{ 
    NSArray *uniqueNetwork = [[NSMutableArray alloc] initWithArray:[[NSSet setWithArray:scan_networks] allObjects]]; 
    [scan_networks removeAllObjects]; 

    NSSortDescriptor *networkName = [[[NSSortDescriptor alloc] initWithKey:@"SSID_STR" ascending:YES] autorelease]; 
    NSArray *descriptors = [NSArray arrayWithObjects:networkName,nil]; 

    [scan_networks addObjectsFromArray:[uniqueNetwork sortedArrayUsingDescriptors:descriptors]]; 
} 

如何可以解决,谢谢

回答

4

可以使用的NSSet,但如果你在订货时并不重要,如果为了此事,然后去这种方法,只能使用。我已经使用它,它给出了完美的答案。在NSmutableArray数组放置您的NSmutableArray其中包含重复值。

NSArray *copy = [NSmutableArray copy]; 

NSInteger index = [copy count] - 1; 

for (id object in [copy reverseObjectEnumerator]) 
{ 

if ([NSmutableArray indexOfObject:object inRange:NSMakeRange(0, index)] != NSNotFound) 

{ 
     [NSmutableArray removeObjectAtIndex:index]; 

} 

    index--; 
} 

[copy release]; 
4

你应该首先使用NSMutableSet

为了消除阵列中的所有双入口,看到了这个问题:
Make NSMutableArray or NSMutableSet unique.

+0

我有尝试的NSMutableSet,但仍无法删除, – Apache 2009-12-07 10:16:14

+0

'NSSet'需要您的对象实现'-hash'和'-isEqual:' ,你有这样做吗? – 2009-12-07 11:53:56

+2

套虽然没有顺序。 – mxcl 2011-02-11 12:12:29

3

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

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

我认为它能够更好地做到这一点:

NSMutableIndexSet *indexes = [[NSMutableIndexSet alloc]init]; 

for(int j = 0; j < [myArray count]; j++) { 

for(k = j+1;k < [myArray count];k++) { 

    NSString *str1 = [myArray objectAtIndex:j]; 
    NSString *str2 = [myArray objectAtIndex:k]; 
    if([str1 isEqualToString:str2]) 
     [indexes addIndex:k]; 
    } 
} 

[myArray removeObjectsAtIndexes:indexes]; 

你可以遇到的问题,如果你操作阵列,同时在循环中我的经验。

0

也许你可以尝试NSArray类别。

#import <Foundation/Foundation.h> 

@interface NSArray(filterRepeat) 
-(NSArray *)filterRepeat; 

@end 


#import "NSArray+repeat.h" 
@implementation NSArray(filterRepeat) 
-(NSArray *)filterRepeat 
{ 
    NSMutableArray * resultArray =[NSMutableArray array]; 
    [self enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 
     if (![resultArray containsObject: obj]) { 
      [resultArray addObject: obj]; 
     } 
    }]; 
    return resultArray; 
} 
@end 
1

这是另一种方式:

- (NSArray *)removeDuplicatesFrom:(NSArray *)array { 
    NSSet *set = [NSSet setWithArray:array]; 
    return [set allObjects]; 
} 
+0

为我工作感谢... – kb920 2015-04-07 11:44:40

相关问题