Search code examples
.netvb.netvisual-c++c++-cli

How to trim an array in .NET?


Say I have an array

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

And I want a function that does something like:

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

but that don't allocate and/or move &buffer[0] when you want to trim the array.


Solution

  • .NET arrays are immutable in size once created. You can't trim it; you must reallocate and copy. So Array.Resize already does everything you need. Perhaps just ignore the elements at the end if you really don't want to do this.

    Or; use a List<T>, which encapsulates an array, and does have TrimExcess(). In C# terms:

        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);