2011-10-22 3 views
1

Je crée une application dans laquelle l'utilisateur peut sélectionner plusieurs cellules dans une table et chaque fois qu'une cellule est sélectionnée, elle est ajoutée à un NSMutableArray. La table contient les noms de différents pays. Une fois tous les pays sélectionnés, comment rechercher les pays sélectionnés? Par exemple, comment puis-je vérifier si l'utilisateur a sélectionné États-Unis par exemple?Comment rechercher un tableau de chaînes

J'ai dans mon didSelectRow pour ma table:

if ([selectedCell accessoryType] == UITableViewCellAccessoryNone) { 
     [selectedCell setAccessoryType:UITableViewCellAccessoryCheckmark]; 
     [listofCountriesselected addObject:[NSNumber numberWithInt:indexPath.row]]; 

    } 
    else { 
     [selectedCell setAccessoryType:UITableViewCellAccessoryNone]; 
     [listofCountriesselected removeObject:[NSNumber numberWithInt:indexPath.row]]; 

    } 

Répondre

2

Vous pouvez ajouter les pays à la NSMutableArray et vérifier containsObject. Dans ce cas, j'ajoute une chaîne - vous pouvez ajouter via un identifiant de pays mais vous devez vérifier par le même identifiant de pays (quel que soit votre choix). Le numéro de ligne n'est pas un bon identifiant - ce n'est pas stable.

NSMutableArray *list = [[NSMutableArray alloc] init]; 
[list addObject:@"US"]; 
[list addObject:@"CN"]; 
NSLog(@"usa? %d", (int)[list containsObject:@"US"]); 

Une façon de vérifier encore plus vite si un pays a été sélectionné serait d'ajouter le pays à un NSMutableSet lorsqu'il est sélectionné. Un NSMutableSet est un ensemble de hachage de sorte que les recherches soient très rapides.

NSMutableSet *lookup = [[NSMutableSet alloc] init]; 
[lookup addObject:@"US"]; 
[lookup addObject:@"CN"]; 

NSLog(@"usa? %d", (int)[lookup containsObject:@"US"]); 

deux sorties 1.

La principale différence est la NSMutableArray est une liste d'ordre des éléments - une liste. NSMutableSet est optimisé pour contient - juste un ensemble. Par exemple, si vous voulez non seulement suivre ce qui est sélectionné mais l'ordre dans lequel ils ont été sélectionnés, vous avez besoin d'un tableau mutable. Il n'est pas rare que les applications contiennent des structures de données agrégées pour répondre aux commandes et contiennent des questions de type.

BTW, voici comment vous pouvez obtenir tous les codes pays ISO

NSArray *countryCodes = [NSLocale ISOCountryCodes]; 
for (NSString *cc in countryCodes) 
{ 
    NSLog(@"cc: %@", cc); 
} 
+2

avait jamais pensé le composant de hachage avant. J'adore apprendre des choses! +1 – NJones

Questions connexes