Как обрезать массив в .NET? - PullRequest
2 голосов
/ 17 ноября 2009

скажем, у меня есть массив

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

И я хочу функцию, которая делает что-то вроде:

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

но это не выделяет и / или не перемещает и не помещает в буфер [0], когда вы хотите обрезать массив.

Ответы [ 2 ]

5 голосов
/ 17 ноября 2009

.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);
3 голосов
/ 17 ноября 2009

Вы не можете сделать это в .NET. Массивы в .NET имеют фиксированный размер после выделения; единственный способ изменить размер массива - это перераспределить его (что делает Array.Resize), и это неизменно изменит расположение массива в памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...