2009-03-09 17 views
1
int matrix[3][3] = { 
     {1,2,3}, 
     {1,2,3}, 
     {1,2,3}, 
} 

Wie kann ich Schleife über es?for Schleife in objective-c - primitives Array

Grundsätzlich ist die Längenoperation mein Anliegen.

for (int i=0; XXXXX; i++) { 
    for (int j=0; XXXX; j++) { 
     int value = matrix[i][j]; 
} 
} 

EDIT: Gibt es eine dynamische Möglichkeit, die Array-Größe zu bekommen? Etwas wie sizeof()?

Antwort

1

Sie können dies tun, so wie man es in C:

int matrix[3][3] = { {1,2,3}, {1,2,3}, {1,2,3}, }; 

for(int i = 0; i < 3; i++) 
{ 
    for(int j = 0; j < 3; j++) 
    { 
     int value = matrix[i][j]; 
    } 
} 

Obwohl, empfehle ich statt Magie 3 ist eine Konstante verwendet. Macht alles besser lesbar, besonders die for-Schleife.

+0

ja seine Arbeit, wenn Sie setzen die Bedingung X <3 aber isn 't es einen dynamischen Ansatz? eine Größe von oder etwas? –

+1

Verwenden Sie Objective-C für Kakao? In diesem Fall können Sie ein NSArray oder NSMutableArray verwenden und dann myArray.Count verwenden. http://developer.apple.com/DOCUMENTATION/Cocoa/Reference/Foundation/Classes/NSArray_Class/Reference/Reference.html – Sean

+0

Das Problem mit der harten Codierung 3 in der Schleife ist, wenn jemand ein anderes Element zur Matrix hinzufügt, die Größe von() Konventionen werden verwendet, um nicht alle codierten Größen neu schreiben zu müssen, wenn das passiert. – sfossen

-3

Die Länge des Top-Level-Array 3, die Länge jeden Subarray 3, so sollte diese Arbeit:

for(int i = 0; i < 3; ++i) { 
     for(int j = 0; j < 3; ++j) { 
      // do something here for each element 
     } 
} 
+0

++ i => i ++ ++ j => j ++ – buley

+2

@editor: absolut nicht notwendig, es ist sogar besser mit pre-incr. – moala

6

Für statisch erstellt Array-Typen, können Sie den Operator sizeof verwenden, z.B.

sizeof(myArray)/sizeof(myArray[0]) 

Für dynamisch erstellte Arrays (das heißt durch den Zeiger referened), das wird nicht funktionieren (sizeof wird Ihnen nur die Größe eines Zeigers auf Ihrem System). In diesem Fall benötigen Sie entweder Konstanten oder einen Sentinal-Wert in Ihrem Array. Mit einem Sentinal scanne einfach jede Achse, bis du sie für die Länge gefunden hast (so funktionieren C-Strings mit \ 0).

5

In C ich folgendes tun würde, versuchen:

sizeof(matrix) /sizeof(matrix[0])   <- outer array 
sizeof(matrix[0])/ sizeof(matrix[0][0]) <- inner array 



linux ~ $ cat sizeof_test.c 
#include <stdio.h> 

int main(void) 
{ 
     int matrix[][3] = { {1,2,3}, {1,2,3}, {1,2,3}, }; 
     int matrix2[][3] = { {1,2,3}, {1,2,3}, {1,2,3}, {1,2,3}, }; 
     int matrix3[][4] = { {1,2,3,4}, {1,2,3,4}, {1,2,3,4}, {1,2,3,4}, }; 

     printf("array (%d) - elements(%d)\n", sizeof(matrix) /sizeof(matrix[0]), sizeof(matrix[0])/ sizeof(matrix[0][0])); 
     printf("array (%d) - elements(%d)\n", sizeof(matrix2) /sizeof(matrix2[0]), sizeof(matrix2[0])/ sizeof(matrix2[0][0])); 
     printf("array (%d) - elements(%d)\n", sizeof(matrix3) /sizeof(matrix3[0]), sizeof(matrix3[0])/ sizeof(matrix3[0][0])); 

     return 0; 
} 
linux ~ $ gcc sizeof_test.c -o sizeof_test 
linux ~ $ ./sizeof_test 
array (3) - elements(3) 
array (4) - elements(3) 
array (4) - elements(4) 
linux ~ $