Tables de hachage au cacao
-
19-08-2019 - |
Question
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.
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]);