2016-08-12 3 views
-1

나는 Array.AddRange으로 들쭉날쭉 한 배열을 확장하려고 시도했지만 성공하지 못했습니다. 왜 작동하지 않는지도 모르겠지만 예외는 없지만 배열의 범위는 변경되지 않습니다. (들쭉날쭉 한 배열을 확장하는 방법

public World(ushort[][][] worldMatrice) 
{ 
    // OldWith = 864 
    ushort OldWidth = (ushort)worldMatrice.GetLength(0); 

    // Extend the matrice to (1024) => only the first level [1024][][]    
    worldMatrice.ToList().Add(new ushort[1024- OldWidth][]); 
    // NewWidth = 864 , and should be 1024 ... 
    ushort NewWidth = worldMatrice.getLenght(0); 
} 
+0

'Array.AddRange'는 자바 스크립트가 아닙니까? .NET에서 배열의 크기를 조정할 수 없습니다. 새 배열을 할당하고 요소를 복사 할 수는 있지만 기존 배열의 크기는 변경할 수 없습니다. 어쨌든 "작동하지 않는 것"이 ​​무엇인지 의미하지 않았으며 사용하려고 시도한 코드와 얻은 결과를 코드에 표시하지 않았습니다. –

+0

들쭉날쭉 한 배열은 단지 배열의 1 차원 배열입니다. 다른 모든 1 차원 배열처럼 크기를 조절할 수 있습니다. 지침을 위해 복제본을 참조하십시오. –

답변

1

https://msdn.microsoft.com/en-us/library/bb397694.aspx

Array.AddRange와 아무것도하지 않았다 : 여기 내가 사용하는 코드입니다)는 배열의 크기를 변경하지 않으며 Array.Length는 배열이 가질 수있는 최대 요소 수를 반환하며 null이 아닌 요소의 총 수는 반환하지 않습니다 그 안에 nts.

배열의 크기를 변경하려는 경우 원하는 치수로 이전 배열의 값을 새 배열로 전송해야 할 수 있습니다.

int[] newArray = new int[1024]; 
Array.Copy(oldArray, newArray, oldArray.Length); 

는 배열의 null 이외의 요소의 수를 얻을 당신은 당신의 출력을 저장하지 않은

int count = array.Count(s => s != null); 
+0

_ "Array.AddRange()는 배열의 크기를 변경하지 않습니다."- 예, 그렇습니다. JavaScript가 아니라 C#. 배열의 크기를 조정하고자하는 사람들은 로직을 명시 적으로 코딩하는 대신 Array.Resize()를 사용하도록해야합니다. –

+0

고맙습니다. –

0

worldMatrice.ToList() 

이 배열의 복사본을 생성하고 당신은 그

+0

그래서 나는 => worldMatrice = worldMatrice.toList()를 추가해야합니다. (.....? –

1

같은 것을 사용합니다. 사용해보기 :

worldMatrice = worldMatrice.ToList().Add(new ushort[1024- OldWidth][]).ToArray();