Je cherche une classe en Objective C similaire à KeyValuePair de C# (même sans les génériques). Juste tout ce qui a un premier/deuxième objet. Je peux créer le mien sans problème, mais je me dis que si on est déjà là, il n'y a pas besoin de réinventer la roue. Je n'ai pas eu de chance d'en trouver un moi-même ... Est-ce que quelqu'un en connaît une?Objectif C - Classe KeyValuePair?
Répondre
Donc, fondamentalement, comme un hashmap, non?
Exemple de here:
NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init];
// Add objects to a dictionary indexed by keys
[dictionary setObject:@"A Book about the Letter A" forKey:@"A"];
[dictionary setObject:@"A Book about the Letter B" forKey:@"B"];
[dictionary setObject:@"A Book about the Letter C" forKey:@"C"];
// Retrieve an object from a dictionary with a key
NSLog([dictionary objectForKey:@"B"]);
// Release a dictionary
[dictionary release];
Qu'en est-il en utilisant struct C ordinaire? C'est "plus rapide" que d'écrire une classe entière.
typedef struct KeyValuePair {
const char *key;
const char *value;
} KeyValuePair;
//init like this
KeyValuePair kvp = {"yourkey", "yourvalue"}
choses à garder à l'esprit:
- Structs sont passés par valeur.
- ARC empêche l'utilisation d'objets ObjC avec des structures, mais les primitives C sont toujours prises en charge.
- Vous ne pouvez pas ajouter de structures aux classes de collection ObjC (NSArray, NSDictionary, etc.).
Malheureusement, la structure de C ne fonctionne pas bien avec ARC et vous ne pouvez pas les placer dans NSArray/NSDictionary et beaucoup d'autres endroits. il est presque inutile –
@BryanChen vrai, mais si vous aviez besoin d'une sorte de conteneur pour passer sans avoir à créer et classe entière alors les structures peuvent encore être utiles. L'ARC empêche d'utiliser des objets ObjC avec des structures, mais les primitives C sont toujours supportées. –
vous le faites en plus de façon C/C++ au lieu de ObjC. –
Que diriez-vous d'un simple NSArray?
NSArray* kvp = [NSArray arrayWithObjects: key, value, nil];
// or, using boxed literals,
NSArray* kvp = @[key, value];
...
NSObject* key = [kvp firstObject];
NSObject* value = [kvp lastObject];
Vous pouvez faire une fonction pour envelopper +arrayWithObjects:
(et traiter le cas d'une clé nulle ou valeur qui déclenche l'approche simple)
Accès aux éléments d'un NSArray sera probablement plus rapide qu'un NSDictionary.
- 1. Objectif C Classe ou structure?
- 2. Type de classe C Objectif
- 3. Objectif C: Inclure méthode classe et appel
- 4. Objectif C - Comment hériter d'une autre classe?
- 5. objectif-C++ comment ajouter une méthode dans la classe C++
- 6. objectif-c
- 7. Création d'un KeyValuePair en C++ géré
- 8. objectif-c touch-events
- 9. KeyValuePair VS DictionaryEntry
- 10. Objectif C: erreur "EXC_BAD_ACCESS"
- 11. avertissements Xcode objectif-c
- 12. Un KeyValuePair en Java
- 13. déclare variable globale en classe NSObject (objectif C)
- 14. comment créer une classe de catégorie dans Cocoa objectif-c
- 15. Objectif C une classe ne voit pas l'autre
- 16. lire un objet codé objectif C dans une classe java
- 17. Objectif-C: Relation avec la classe propre (CoreData)
- 18. Objectif C - Comment ajouter une méthode à une classe existante?
- 19. objectif-c (iphone sdk) méthode d'instance d'accès de classe séparée
- 20. coloration syntaxique avec objectif-c
- 21. Objectif c erreur avec extern
- 22. Objectif C/délégué cacao question
- 23. Objectif C - Modèle de stratégie?
- 24. Amazon SQS objectif c
- 25. Chaîne Aide - Objectif C
- 26. objectif c Comparaison NSString
- 27. @property objectif-c syntax
- 28. objectif c popen
- 29. objectif c audiomètre
- 30. Objectif délai c
Comme ceci, mais seulement une instance unique (hashmap/dictionnaire contenant plusieurs clés/valeurs). Je suis à la recherche d'une classe qui n'est qu'une seule clé/valeur. – Kyle
Vous pourriez envisager de créer votre propre classe "paire". Alternativement, vous pourriez sous-classer NSMutableDictionary et appliquer une règle d'une seule paire d'objets dans votre dictionnaire sous-classé à la fois. Il semble bizarre qu'il n'y ait pas d'objet standard "NSPair" ... – PixelCloudSt