Comment puis-je créer un Objective-C NSDictionary de NSArrays sans réutiliser le même NSArray?
Longtemps Windows développeur, 1ère fois Objective-C/iPhone développeur veut créer un NSDictionary de NSArrays qui peuvent être affichés dans une plaine UITableView avec alphabétique sections.
La source de ce dictionnaire de tableaux est un tableau contenant les noms des magasins triés par ordre alphabétique:
Apple Store
Atlanta Compagnie De Pain
Les frontières
Build-A-Bear Workshop
Cargill Galerie
Dillards
Dick's Sporting goods
Eddie Baure
FootLocker
GameStop
Heizberg Diamants
LensCrafters
Mcdonald's
Nordstrom
Payless Shoe Source
Pottery Barn
Solstice
Starbucks Coffee
Victoria Secret
White Barn Bougie Co.
Le dictionnaire de tableaux créé à partir de la source devrait ressembler à quelque chose comme ceci (le type de données entre parenthèses):
Racine (Dictionnaire)
....Un (Array)
........Apple Store (String)
........Atlanta Compagnie De Pain (String)
....B (Tableau)
........Frontières (String)
........Build-A-Bear Workshop (String)
....C (Array)
........Cargill Galerie (String)
....D (Array)
........Dillards (String)
........Dick's Sporting goods (String)
....etc.
Un dictionnaire, des tableaux comme la structure ci-dessus remplit la TableView et affiche comme ceci:
Un
Apple Store
Atlanta Compagnie De Pain
B
Les frontières
Build-A-Bear Workshop
C
Cargill Galerie
D
Dillards
Dick's Sporting goods
etc.
Le code que j'ai écrit que crée le dictionnaire de tableaux finit de mettre le dernier magasin (White Barn Bougie Co.) après chaque en-tête de section.
Un
White Barn Bougie Co.
B
White Barn Bougie Co.
C
White Barn Bougie Co.
D
White Barn Bougie Co.
etc.
Je me rends compte de ce qui se passe parce que je réutiliser un tableau temporaire, le remplissant avec les A, il curage, le remplissant avec les B, il curage, etc. Voici le code qui crée le dictionnaire de tableaux à partir de la source matrice.
NSMutableDictionary *places = [[NSMutableDictionary alloc] init];
NSMutableArray *alphaPlace = [[NSMutableArray alloc] init];
for (int x = 1; x <= 26; x++) {
NSString *alphabet = [[NSString alloc] initWithString:@"ABCDEFGHIJKLMNOPQRSTUVWXYZ"];
NSString *letter = [alphabet substringWithRange:NSMakeRange(x - 1, 1)];
for (NSString *place in allPlaces) {
NSString *first = [place substringWithRange:NSMakeRange(0, 1)];
if ([first isEqualToString:letter] == YES) { //Add to alphaPlace
[alphaPlace addObject:place];
}
else { //Add alphaPlace to places, clear out alphaPlace; add new item to alphaPlace
[places setValue:alphaPlace forKey:letter];
[alphaPlace removeAllObjects]; //SAME ARRAY BEING USED FOR ALL LETTERS OF ALPHABET!
[alphaPlace addObject:place];
}
}
}
Je me rends compte que je pouvais "force brute" ce par la création de 26 distinctes des tableaux et à l'aide d'une instruction switch pour sélectionner la bonne à remplir mais je ne veux vraiment pas le faire. J'ai pensé que quelqu'un de plus familier avec Objective-C pouvait m'apporter une solution plus élégante.
Merci à l'avance. Laissez-moi savoir si vous avez besoin de plus d'infos.
Vous devez vous connecter pour publier un commentaire.
Je pense que vous voulez faire quelque chose comme ceci: