2016-10-20 2 views
0

3D 배열의 올바른 사용법을 이해하는 데 문제가 있습니다. C#을 사용하고 있습니다. 나의 주된 혼란은 어느 색인이 Z 색인인지에 관한 것이다. 불행히도, 나는 많은 인터넷 검색을 해왔지만 대부분의 정보는 2D 배열에 관한 것입니다. 의 경우에, 해당 가이드에 따라 https://www.youtube.com/watch?v=Eqo552n1DSc어떤 인덱스가 3D 배열의 Z 인덱스입니까

: YouTube에서 사람은, 그러나, 제 3 인덱스 Z이었다라고

public string[,,] array3DString = new string[2, 5, 6]; 

2 =의 X, 5 = y 및 6 = Z.

처음에 이것은 의미가 있었지만 시각적으로 이해할 수 있도록 루프를 통해 배열을 채우려고했습니다. 시각적으로 볼 때 도움이됩니다. 그래서 나는이 간단한 프로그램 작성 :

class Test 
    { 
     public string[,,] array3DString = new string[2, 5, 5]; 
     public void SetArray3DString() 
     { 
      for (int zIndex = 0; zIndex < 2; zIndex++) 
      {    
       for (int r = 0; r < 5; r++) 
       { 
        for (int c = 0; c < 5; c++) 
        { 
         array3DString[zIndex, r, c] = "z" + zIndex + "r" + r + "c" + c;     
        } 
       } 
      } 
     }  
     public void PrintArray3DString() 
     { 
      for (int zIndex = 0; zIndex < 2; zIndex++) 
      { 
       Console.WriteLine("Z Index - " + zIndex); 
       for (int r = 0; r < 5; r++) 
       { 
        for (int c = 0; c < 5; c++) 
        { 
         if (c < 4) 
         { 
          Console.Write(array3DString[zIndex, c, r] + ","); 
         } 
         else 
         { 
          Console.WriteLine(array3DString[zIndex, c, r]); 
         } 
        } 
       } 
      } 
     } 

    } 

    class Program 
    { 
     static void Main(string[] args) 
     {    
      Test newTest = new Test(); 
      newTest.SetArray3DString(); 
      newTest.PrintArray3DString(); 
      while (true); 
     } 
    } 

내가 루프와 3 차원 배열을 반복하려고 할 때 첫 번째 인덱스는 Z로, 그것은 더 많은 이해를 한 것으로 나에게 보였다을 물론, 외부 때문에 루프는 마지막으로 색인을 생성합니다. 출력은 다음과 같습니다.

Z Index - 0 
z0r0c0,z0r1c0,z0r2c0,z0r3c0,z0r4c0 
z0r0c1,z0r1c1,z0r2c1,z0r3c1,z0r4c1 
z0r0c2,z0r1c2,z0r2c2,z0r3c2,z0r4c2 
z0r0c3,z0r1c3,z0r2c3,z0r3c3,z0r4c3 
z0r0c4,z0r1c4,z0r2c4,z0r3c4,z0r4c4 
Z Index - 1 
z1r0c0,z1r1c0,z1r2c0,z1r3c0,z1r4c0 
z1r0c1,z1r1c1,z1r2c1,z1r3c1,z1r4c1 
z1r0c2,z1r1c2,z1r2c2,z1r3c2,z1r4c2 
z1r0c3,z1r1c3,z1r2c3,z1r3c3,z1r4c3 
z1r0c4,z1r1c4,z1r2c4,z1r3c4,z1r4c4 

내가 기대하는 바가 있습니다. 마지막 색인 Z를 만들려고 할 때 혼란 스러웠습니다.

그래서 내가 맞습니까? 아니면 Youtube 비디오 오른쪽에있는 사람입니까? 어떤 색인이 Z이어야하며 그 이유는 무엇입니까? 그건 상관 없니?

참고로이 사이트도 시도해 보았습니다. https://www.tutorialspoint.com/csharp/csharp_multi_dimensional_arrays.htm 하지만 다시 주로 2D 배열에 초점을 맞추었고이 간단한 질문에 대답하지 않았습니다.

미리 도움을 주셔서 감사합니다.

답변

0

저장 방법에 대한 규칙은 없습니다. 모든 것이 메모리에서 어떻게 직렬화되는지에 관한 것입니다. 코드에 차이가 있습니다

, 작성 및 인쇄하는 동안 :

충전물 :

array3DString[zIndex, r, c] <--- r = 2nd index.. 

인쇄 :

array3DString[zIndex, c, r] <--- r = 3rd index.. 

그래서이 같은 길이의 치수가 충돌하지 않습니다 c와 r이 같음

+0

그럼 내가 Z 지수를 어느 것이 고려해도 상관 없다고 말하는 것입니까? – Simflare

+0

그리고 예, 시각적으로 올바르게 보이도록 그렇게 인쇄했습니다. 신속한 회신을 위해 건배! – Simflare

+0

개인적으로 나는이 목적을 위해 다차원 배열을 피할 것이다. 차라리 한 차원 배열을 사용하고 싶습니다. 오프셋을 계산하려면'((width * height) * z) + (width * y) + x'하지만 moslty는 선형 스캔을 수행합니다. –

관련 문제