У меня есть массив, скажем:
var arr1 = new [] { 1, 2, 3, 4, 5, 6 };
Теперь, когда размер моего массива превышает 5, я хочу изменить размер текущего массива до 3 и создать новый массив, содержащий верхние 3 значения, поэтому после этого действия:
arr1 = new [] { 1, 2, 3 };
newArr = new [] { 4, 5, 6 };
Какой самый быстрый способ сделать это? Думаю, мне придется заглянуть в неуправляемый угол, но без понятия.
Дополнительная информация:
- Массивы должны быть в состоянии увеличиваться без больших потерь производительности
- Массивы будут содержать только Int32
- Назначение массива - сгруппировать числа в исходном массиве без сортировки всего списка
Вкратце: я хочу разделить следующий входной массив:
int[] arr = new int[] { 1, 3, 4, 29, 31, 33, 35, 36, 37 };
в
arr1 = 1, 3, 4
arr2 = 29, 31, 33, 35, 36, 37
но поскольку идеальная скорость достигается при размере массива 3, arr2
следует разделить на 2 массива равномерного размера.
Примечание
Я знаю, что реализация массива в памяти довольно наивна (ну, по крайней мере, это в C, где вы можете манипулировать количеством элементов в массиве, чтобы размер массива изменялся). Также, что где-то в Win32 API есть функция memory move
. Поэтому я думаю, что это будет самый быстрый:
- Изменить
arr1
, чтобы оно содержало только 3 элемента
- Создать новый массив
arr2
с размером 3
- Переместить байты, которые больше не находятся в
arr1
в arr2