2010-08-20 5 views
9

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

11

Donc, fondamentalement, comme un hashmap, non?

Use NSMutableDictionary

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]; 
+8

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

+3

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

1

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.).
+0

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 –

+0

@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. –

+1

vous le faites en plus de façon C/C++ au lieu de ObjC. –

3

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.