2009-05-26 6 views
3

J'essaie de stocker des données de la façon suivante avec une chaîne comme clé et je voudrais un tableau comme valeur.NSDictionary Objective-C

objets clés

"lettres" { 'a', 'b', 'c', 'd'}
"numéros" {1,2,3,4,5,6,7}

Est-ce possible avec NSDictionary dans le code? Si oui, à quoi cela ressemblerait-il? Je suis vraiment confus à ce sujet.

Répondre

16

Une façon simple de le faire dans le code (et un des nombreux plusieurs façons dont vous pouvez le faire) :

NSMutableDictionary *dict = [NSMutableDictionary dictionary]; 
[dict setObject:[NSArray arrayWithObjects:@"a", @"b", @"c", @"d", nil] forKey:@"letters"]; 
[dict setObject:[NSArray arrayWithObjects:[NSNumber numberWithInt:1], [NSNumber numberWithInt:2], [NSNumber numberWithInt:3], [NSNumber numberWithInt:4], nil] forKey:@"numbers"]; 

cela crée un NSDictionary avec un tableau de chaînes et un tableau de NSNumber objets, il existe d'autres façons de créer des tableaux, mais qui montre une méthode de base pour le faire.

par les commentaires ci-dessous:

Si vous voulez ajouter des éléments aux tableaux un à la fois ...

// create the dictionary and add the letters and numbers mutable arrays 
    NSMutableDictionary *dict = [NSMutableDictionary dictionary]; 
    NSMutableArray *letters = [NSMutableArray array]; 
    NSMutableArray *numbers = [NSMutableArray array]; 
    [dict setObject:letters forKey:@"letters"]; 
    [dict setObject:numbers forKey:@"numbers"]; 

    // add a letter and add a number 
    [[dict objectForKey:@"letters"] addObject:@"a"]; 
    [[dict objectForKey:@"numbers"] addObject:[NSNumber numberWithInt:1]]; 
    // This now has an NSDictionary (hash) with two arrays, one of letters and one 
    // of numbers with the letter 'a' in the letters array and the number 1 in 
    // the numbers array 
+0

Y a-t-il un moyen de le faire dynamiquement pour que j'ajoute une paire clé/valeur à la fois dans le code? – TheGambler

+1

Faire: [dict setObject: unObjet forKey: @ "clé"]; ajoute une paire clé/valeur au dictionnaire. – paulthenerd

+0

Oui, vous pouvez mais c'est ce que l'exemple est en train de faire. Dans votre question, la clé est "lettres" et les valeurs sont un tableau de caractères "a b c d". N'est-ce pas ce que vous cherchez? – stefanB

2

Vous pouvez les représenter comme des listes de propriétés. Property-List Documentation.

<dict> 
    <key>letters</key> 
    <array> 
     <string>a</string> 
     <string>b</string> 
     <string>c</string> 
     <string>d</string> 
    </array> 
    <key>letters</key> 
    <array> 
     <integer>1</integer> 
     <integer>2</integer> 
     <integer>3</integer> 
     <integer>4</integer> 
     <integer>5</integer> 
     <integer>6</integer> 
     <integer>7</integer> 
    </array> 
</dict> 

Pour un aperçu de la façon de sérialiser et désérialiser vos données à Cocoa, voir Archives and Serialization Guide for Cocoa

6

En supposant que vous avez un NSArray appelé letters et un appelé numbers contenant le bon valeurs:

NSDictionary* dict = [NSDictionary dictionaryWithObjectsAndKeys: 
    letters, @"letters", 
    numbers, @"numbers", 
    nil 
]; 

Assurez-vous de retain si vous voulez garder dict autour, ou bien utiliser alloc et initWithObjectsAndKeys. Pour plus de détails, voir NSDictionary.

+0

vous avez inversé l'ordre des objets et des clés – newacct

+0

merci de me l'avoir fait remarquer :-) Cela me semble encore en arrière :) – freespace

Questions connexes