2017-02-23 13 views
1

의 범위를 벗어난 나는 가변 배열을 선언합니다. 나는 아래의 작업을 수행 할 경우C#을 가변 배열 :</p> <pre><code>char[][] m = new char[10][]; </code></pre> <p>나중에이 채워집니다 : 배열 문제

System.Text.StringBuilder s = new System.Text.StringBuilder(c); 
for (int x = 0; x < 10; x++) 
    s.Append('='); 

    for (int x = 0; x < 10; x++) m[x] = s.ToString().ToCharArray(); 

, 나는 두 번째 차원에 오류가 발생합니다 :

Console.WriteLine(String.Format("width={0}", m.GetLength(0))); 
Console.WriteLine(String.Format("height={0}", m.GetLength(1))); <---- ERROR HERE 

어떤 아이디어?

+0

이 배열은 지그재그 배열이며 사각형 배열 ('char [,] maz'로 선언)이 아닙니다. 각 하위 배열의 길이가 달라집니다. 당신은'maz [index] .Length'로 확인합니다. – Abion47

+0

['GetLenght()'] (https://msdn.microsoft.com/en-us/library/system.array.getlength (v = vs.110) .aspx)를 사용하지 말고, 오히려 ['Length' ] (https://msdn.microsoft.com/en-us/library/system.array.length (v = vs.110) .aspx) 첫 번째 배열의 개별 항목. – Sinatr

답변

2

정사각형 배열과 가변 배열이 혼동 스럽습니다. 가변 배열은 배열의 배열로 알려져 있으며, 그것은이처럼 보이는 : 가변 배열의 각 요소는 그 자체로 배열입니다

char[][] a = new char[10][]; 

, 그것은 어떤에서 완전히 다른 길이를 가질 수있다 다른 사람 :

a[0] = new char[1]; 
a[1] = new char[100]; 
a[2] = new char[5]; 
... 
a[9] = new char[999999]; 

당신이 볼 수 있듯이, GetLength(1)는 가변 배열에 대한 이해되지 않는다. 그것은 무엇을 반환 할 것입니까? 배열의 두 번째 수준의 길이를 얻으려면, 당신은 그들을 통해 반복하고 자신의 다양한 Length 속성을 호출 할 것이다 : 당신의 목적을 위해

for (int i = 0; i < a.Length; i++) 
{ 
    int length = a[i].Length; 
} 

을, 당신은 아마 또한 2D로 알려진 정사각형 배열을 (사용하려면 배열) 대신

char[,] a = new char[10,10]; 

지그재그 배열과 달리 사각형 배열의 두 번째 차원은 동일한 길이가됩니다. 즉, GetLength(1)은 자신있게 값을 반환 할 수 있습니다.

1

Array.GetLength(int dimension)다차원 어레이에만 해당됩니다. 배열 'm'이 이 아니며 다차원이지만 은 들쭉날쭉 한입니다.

즉 요소 유형이 char[] 인 배열을 의미합니다.

따라서 한 치수 (길이는 10) 만 있고 GetLength(1)은 오류를 발생시킵니다.

0에서 9까지 i에 대해 m[i].Length을 얻을 수 있습니다. 그러나 요소를 초기화 한 경우에만 :

m[0] = new char[10]; 
int l = m[0].Length; // 10 
+0

기술적으로 말하자면, 어떤 종류의 배열이라도'GetLength'를 사용할 수 있습니다. 존재하지 않는 차원을 쿼리하려고하면 예외를 throw하고 모든 다차원 배열에 대해 존재하는 유일한 차원은 '0'입니다. ('Length'는 더 빠르고 더 편리하기 때문에 비 다차원 배열에서'GetLength'를 사용할 이유가 없다는 사실도 있습니다.) – Abion47