2010-04-06 5 views
7
for (tempI = 0; tempI < 10; tempI++) 
{ 
    tempJ = 1; 
    NSArray *objectsForArray = [NSArray arrayWithObjects:@"array[tempI][tempJ]", @"array[tempI][tempJ+1]", @"array[tempI][tempJ+2]", nil]; 
} 

Puis-je écrire le code comme ci-dessus. J'ai besoin de stocker une valeur flottante (array[][]) dans NSArray. Puis-je le faire ?
Mon problème est, j'ai une matrice commeComment puis-je stocker une valeur flottante dans un NSArray?

1.0 0.4 0.3 0.5 
2.0 0.4 0.5 0.5 
3.0 4.3 4.9 0.5 

je dois récupérer les valeurs (0,4, 0,3, 0,5) en utilisant 1,0, 2,0 3,0. Comment puis-je utiliser NSDictionary pour cela?
Merci Vous

for(tempI = 0; tempI < 5; tempI++) 
{ 
     NSDictionary *dictionary[tempI] = [ [NSDictionary alloc] initWithObjects:@"array[tempI][tempI + 1]", @"array[tempI][tempI + 2]", @"array[tempI][tempI + 3]", @"array[tempI][tempI + 4]", @"array[tempI][tempI + 5]", nil]; 
} 

Puis-je écrire de cette façon? Est-ce que l'objectif C l'accepte?

Je reçois une erreur

error: variable-sized object may not be initialized 
+1

Puis-je demander pourquoi voulez-vous stocker une matrice 3D dans NSArray? – Prcela

Répondre

18

NSArray ne pouvez stocker des objets, pas primitives, amuserez, la classe NSNumber a une méthode pratique qui prend une primitive flottante et renvoie un objet flottant en tant que tel:

+ (NSNumber *)numberWithFloat:(float)value 

donc vous pouvez alimenter votre tableau comme ceci:

float exampleFloat = 5.4; 

NSArray *anArrayOfFloatObjects = [NSArray arrayWithObjects: 
            [NSNumber numberWithFloat:10.0], 
            [NSNumber numberWithFloat:2], 
            [NSNumber numberWithFloat:4], 
            [NSNumber numberWithFloat:exampleFloat], 
            nil]; // Don't forget the nil to signal 
              // end of the array 

Quant à votre question spécifique, vous pouvez écrire:

NSMutableArray *tmpArray; // this is necessary since an NSArray can only be initialized 
          // once and we will need to have all the objects that will be 
          // added to the array available to us at once. 

tmpArray = [NSMutableArray arrayWithCapacity:12]; // returns an autoreleased empty array 


for (int col=0; col<=3; col++) { 
    for (int row=0; row<=2; row++) { 
     [tmpArray addObject:[NSNumber numberWithFloat:array[col][row]]]; 
    } 
} 
NSArray *myArray = [NSArray arrayWithArray:tmpArray]; 

jusqu'à utiliser un dictionnaire pour retrive valeurs de la matrice, la seule façon Je pense hors serait de code clé vos valeurs de la matrice en tant que tels:

A1 A2 A3 A4

B1 B2 B3 B4

C1 C2 C3 C4

D1 D2 D3 D4

par exemple:

NSMutableDictionary *myDictionary; 

[myDictionary setObject:[NSNumber numberWithFloat:5.0] forKey:@"A1"]; 

... 

NSNumber *myFloat = [myDictionary objectForKey:@"A1"]; 

, il est également important de souligner ici que chaque fois que quelque chose est écrit sous la format @ "quelque chose ici", c'est littéralement un objet NSString. donc quand vous écrivez:

NSArray *objectsForArray = [NSArray arrayWithObjects: 
              @"array[tempI][tempJ]", 
              @"array[tempI][tempJ+1]",                                    
              @"array[tempI][tempJ+2]", 
              nil]; 

c'est exactement le même que writting:

NSString *newString = @"Roses are red"; // example strings 
NSString *newString1 = @"Violets are blue"; 
NSString *newString2 = @"array[tempI][tempJ+1]"; 
NSString *newString3 = @"These are all string objects"; 

NSArray *objectsForArray = [NSArray arrayWithObjects: 
              @"array[tempI][tempJ]", 
              newString2,                                   
              @"array[tempI][tempJ+2]", 
              nil]; 
+1

Merci beaucoup de me donner des précisions sur NSArray et NSDictionary. Ça m'aide beaucoup. –

0

Essayez:

for (int tempI = 0; tempI < 10; tempI++) 
{ 
    int tempJ = 1; 
    fl_tempI = float(tempI); 
    NSArray *objectsForArray = [NSArray arrayWithObjects:@"array[fl_tempI][tempJ]", @"array[fl_tempI][tempJ+1]", @"array[fl_tempI][tempJ+2]", nil]; 
} 
Questions connexes