Question

Les

HashTables / HashMaps sont l’une des structures de données les plus utiles (sinon les ) les plus utiles. En tant que tel, l’une des premières choses sur laquelle j’ai enquêté lorsque j’ai commencé à apprendre la programmation dans Cocoa était de savoir comment créer, peupler et lire des données à partir d’une table de hachage.

À ma grande surprise: toute la documentation que j'ai lue sur la programmation Cocoa / Objective-C ne semble pas expliquer grand chose du tout. En tant que développeur Java qui utilise " java.util " comme s'il s'agissait d'une fonction corporelle: cela me laisse complètement perplexe.

Donc, si quelqu'un pouvait me fournir un guide pour créer, remplir et lire le contenu d'une table de hachage, je l'apprécierais grandement.

Était-ce utile?

La solution

NSDictionary et NSMutableDictionary ?

Et voici un exemple simple:

NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init];
[dictionary setObject:anObj forKey:@"foo"];
[dictionary objectForKey:@"foo"];
[dictionary removeObjectForKey:@"foo"];
[dictionary release];

Autres conseils

Vous pouvez essayer d'utiliser un NSHashTable !

Si vous utilisez Leopard (et le nouveau Garbage Collection de Cocoa), vous souhaitez également jeter un coup d'œil à NSMapTable .

En plus de NSDictionary, consultez également NSSet lorsque vous avez besoin d’une collection sans ordre ni doublon.

Utilisez NSHashTable depuis iOS 6.0+ SDK. La table de hachage est modélisée d'après NSSet avec les différences suivantes: Il peut contenir de faibles références à ses membres. Ses membres peuvent être copiés en entrée ou utiliser l'identité du pointeur pour l'égalité et le hachage. Il peut contenir des pointeurs arbitraires (ses membres ne sont pas obligés d'être des objets).

 NSHashTable *hashTable = [NSHashTable 
 hashTableWithOptions:NSPointerFunctionsCopyIn];
 [hashTable addObject:@"foo"];
 [hashTable addObject:@"bar"];
 [hashTable addObject:@100];
 [hashTable removeObject:@"bar"];
 NSLog(@"Members: %@", [hashTable allObjects]);

Utilisez NSMapTable à partir de iOS 6.0+ SDK. La table de cartes est modélisée d'après NSDictionary avec les différences suivantes: Les clés et / ou les valeurs sont éventuellement tenues & # 8220; faiblement & # 8221; de telle sorte que les entrées sont supprimées lors de la récupération de l'un des objets. Ses clés ou ses valeurs peuvent être copiées en entrée ou utiliser l'identité du pointeur pour l'égalité et le hachage. Il peut contenir des pointeurs arbitraires (son contenu n'est pas contraint d'être des objets).

 id delegate = ...;
 NSMapTable *mapTable = [NSMapTable 
 mapTableWithKeyOptions:NSMapTableStrongMemory
                                         valueOptions:NSMapTableWeakMemory];
 [mapTable setObject:delegate forKey:@"foo"];
 NSLog(@"Keys: %@", [[mapTable keyEnumerator] allObjects]);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top