2010-07-16 9 views

Répondre

5

Ceci est certainement possible, mais je pense qu'il est intéressant de noter que NSArrays ne peut contenir que objets, pas les types primitifs.

Pour contourner ce problème, vous devez utiliser le wrapper primitif de type NSNumber.

NSMutableArray *outer = [[NSMutableArray alloc] init]; 

NSMutableArray *inner = [[NSMutableArray alloc] init]; 
[inner addObject:[NSNumber numberWithInt:someInt]]; 
[outer addObject:inner]; 
[inner release]; 

//do something with outer here... 
//clean up 
[outer release]; 
+0

Merci pour votre réponse. Est-il possible de créer un tableau dynamique et ne pas définir la longueur au début? – Questions

+1

@MarkSiu, Oui. Si vous voulez, je peux vous donner un exemple de cela. –

+0

Merci pour votre réponse. Pourriez-vous me donner l'exemple? Merci beaucoup. – Questions

-1

Édité pour rendre ma réponse plus applicable à la question. Au départ, je n'ai pas remarqué que vous cherchiez un tableau 2D. Si vous savez combien de combien vous avez besoin à l'avance, vous pouvez entrelacer les données et avoir une foulée. Je sais qu'il y a probablement d'autres façons (plus objectives) d'avoir des tableaux à l'intérieur d'un tableau, mais pour moi cela devient confus. Un tableau à l'intérieur d'un tableau n'est pas un tableau à deux dimensions. C'est juste une deuxième dimension dans l'un des objets. Vous auriez à ajouter un tableau à chaque objet, et ce n'est pas ce que je considère comme un tableau à deux dimensions. Bien ou mal Je fais habituellement les choses d'une manière qui me semble logique.

Disons donc que vous avez besoin d'un tableau de 6x6:

int arrayStride=6; 
int arrayDepth=6; 
NSMutableArray *newArray = [[NSMutableArray alloc] initWithCapacity:arrayStride*arrayDepth]; 

Je préfère initialiser le tableau en le remplissant avec des objets;

for(int i=0; i<arrayStride*arrayDepth; i++) [newArray addObject @"whatever"]; 

Puis, après que vous pouvez accéder à des objets par firstDim + secondDim * 6

int firstDim = 4; 
int secondDim = 2; 
NSString *nextString = [newArray objectAtIndex:firstDim+secondDim*6]; 
+0

Ne répond pas à la question (OP pose une question sur un tableau bidimensionnel), et est incorrect pour démarrer (les index commencent à 0, donc l'index du dernier objet est i-1, pas i). –

+0

Je n'ai pas remarqué la chose en 2D ... et oui mon erreur était pour le dernier objet. Merci de l'avoir signalé. J'ai changé ma réponse à la façon dont je ferais un tableau 2D. – badweasel

1

Essayez NSMutableDictionary avec NSNumbers les clés et les tableaux comme des objets. Une dimension sera les clés, l'autre sera les objets.

Pour créer la "matrice 2D" spécifique

NSMutableDictionary *twoDArray = [NSMutableDictionary dictionary]; 
for (int i = 0; i < 10; i++){ 
    [twoDArray setObject:arrayOfStrings forKey:[NSNumber numberWithInt:i]]; 
} 

Pour extraire les données

NSString *string = [[twoDArray objectForKey:[NSNumber numberWithInt:3]] objectAtIndex:5]; 
//will pull string from row 3 column 5 -> as an example