2009-11-17 73 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 2009-11-17 20:03:12

3

你不能在.NET中這樣做。 .NET中的數組一旦分配就具有固定的大小;你可以改變數組大小的唯一方法是重新分配它(這是Array.Resize所做的),並且這總是會改變數組在內存中的位置。