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

どのようにループすることができますか?forループfor objective-c - プリミティブ配列

基本的に長さ操作は私の懸念事項です。

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

EDIT:配列サイズを動的に取得する方法はありますか? sizeof()のようなもの?

答えて

1

は、あなただけの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]; 
    } 
} 

けれども、私が代わりにマジック3の定数を使用することをお勧めします。すべてのものを読みやすくします(特にforループ)。

+0

はいその作業あなたはX <3 に条件を設定するが、そこには、動的なアプローチisn'tか? sizeofまたは何か? –

+1

Objective-C for Cocoaを使用していますか?もしそうなら、NSArrayまたはNSMutableArrayを使用して、myArray.Countを使用することができます。 http://developer.apple.com/DOCUMENTATION/Cocoa/Reference/Foundation/Classes/NSArray_Class/Reference/Reference.html – Sean

+0

ハードコーディング3のループの問題は、誰かが行列に別の要素を追加したとき、sizeof ()規約は、すべてのコード化されたサイズを書き換える必要がない場合に使用されます。 – sfossen

-3

トップレベルの配列の長さは3であり、各サブ配列の長さは3であるので、これは動作するはず:

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:必須ではありません。 – moala

6

静的に作成された配列型の場合、あなたは、sizeof演算子を使用することができ、例えば(すなわちポインタによってreferened)動的に作成アレイの場合

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

、これは(はsizeofはちょうどあなたのシステム上のポインタのサイズを与える)は動作しません。この場合、配列には定数またはセンチニアル値が必要です。 sentinalを使って、長さ(これはCの文字列がどのように動作するか、\ 0を使用する方法です)を見つけるまで、各軸をスキャンしてください。私は次のようにしてくださいCで

5

、試してみてください。

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 ~ $