2009-11-17 5 views
2

.NET에서 배열을 자르는 방법?

배열

array<double>^ buffer = gcnew array<double>(100); 

그리고 같은 뭔가를 원하는 함수를 원하는 :

void foo(array<double>^% buffer) 
{ 
    Array::Resize(buffer, 10); 
} 

하지만 할당 및/또는 이동 & 버퍼 [0] 때 트림 할 때 배열

답변

5

.NET 배열은 일단 만들어지면 크기가 변경되지 않습니다. 너 수 없습니다 그것을 자르십시오; 다시 할당하고 복사해야합니다. 따라서 Array.Resize은 이미 필요한 모든 것을 처리합니다. 당신이 정말로 이것을하고 싶지 않다면 아마 끝 부분의 요소들을 무시할 것입니다.

또는; 배열이이고 배열이 List<T>을 사용하고 TrimExcess()입니다. C# 용어 :

var list = new List<int>(100); 
    // prints 0/100 
    Console.WriteLine("{0}/{1}", list.Count, list.Capacity); 
    list.Add(1); 
    list.Add(2); 
    list.Add(3); 
    // prints 3/100 
    Console.WriteLine("{0}/{1}", list.Count, list.Capacity); 
    list.TrimExcess(); 
    // prints 3/3 
    Console.WriteLine("{0}/{1}", list.Count, list.Capacity); 
+0

나는 두려웠다. ArraySegment가 도움이 될지도 모른다고 생각했지만 생각하지 않았습니다. 감사합니다 :) – Anzurio

3

.NET에서는이 작업을 수행 할 수 없습니다. .NET의 배열은 일단 할당되면 고정 된 크기입니다. 배열의 크기를 변경할 수있는 유일한 방법은 배열을 다시 할당하는 것입니다 (Array.Resize의 기능).이 배열은 메모리의 배열 위치를 항상 변경합니다.

관련 문제