2009-12-07 7 views
1

je suis la numérisation d'informations wifi en utilisant NSMutableArray, mais il y a peu de valeurs en double apparaissent, donc j'essayer d'utiliser le code suivant, mais encore obtenir les valeurs en double,comment supprimer doublon pour 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]]; 
} 

comment cette peut être résolu, merci

Répondre

4

Vous pouvez utiliser nsset mais si vous il est utilisé uniquement lorsque l'ordre n'a pas d'importance si l'ordre soit aller alors pour cette approche. Je l'ai utilisé et donne une réponse parfaite. à la place du tableau NSmutableArray mettez votre NSmutableArray qui contient la valeur en double.

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

Vous devriez utiliser un NSMutableSet en premier lieu.

Pour éliminer toutes les entrées doubles dans un tableau, voir cette question:
Make NSMutableArray or NSMutableSet unique.

+0

j'ai essayer avec NSMutableSet, mais ne peut pas supprimer, – Apache

+0

'NSSet' exige que vos objets implémentent' '-hash' et -isEqual:' , l'as-tu fait? –

+2

Les ensembles n'ont aucune commande cependant. – mxcl

3

Voici le code de suppression des doublons des valeurs de NSMutable Array .. il travaillera pour vous. monTableau est votre Mutable tableau que vous souhaitez supprimer les valeurs doublons ..

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

Je pense que son mieux pour ce faire:

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]; 

Vous pouvez rencontrer des problèmes si vous manipuler le tableau en boucle dans mon expérience.

0

peut-être vous pouvez essayer la catégorie 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

C'est une autre façon:

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

travailler pour moi merci ... – kb920

Questions connexes