2009-03-09 8 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]; 
} 
} 

편집 : 동적으로 배열 크기를 가져 오는 방법이 있습니까? 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 : 절대적으로 필요하지 않으며, 사전 incr으로 더 좋습니다. – moala

6

정적 생성 된 배열 타입 들어 sizeof의 연산자를 사용하여, 예를 들어 (즉 포인터 referened) 동적으로 생성 된 배열

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

,이 (sizeof 연산자는 당신에게 당신의 시스템에서 포인터의 크기를 줄 것이다) 작동하지 않습니다. 이 경우 상수 또는 배열의 sentinal 값이 필요합니다. sentinal을 가지고 길이를 찾을 때까지 각 축을 스캔하십시오 (이것은 \ 0을 사용하여 C 문자열이 작동하는 방법입니다). 다음과 같은 처리를 할 것 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 ~ $