Эффективное сжатие двумерного массива в C # - PullRequest
2 голосов
/ 08 октября 2008

Какой эффективный способ уменьшить двумерный массив до меньшего размера в C #?

Например:

var bigArray = new object[100, 100];
var smallArray = new object[10, 10];

bigArray[0, 0] = 1;
bigArray[0, 1] = 2;
...
bigArray[99, 99] = 100000;


startRowIndex = 0;
startColumnIndex = 0;
endRowIndex = 9;
endColumnIndex = 9;

smallArray = bigArray.SomeShirnkingMethod(startRowIndex, startColumnIndex, endRowIndex, endColumnIndex);

Как вы напишите SomeShrinkingMethod ()?

Спасибо!

РЕДАКТИРОВАТЬ: я просто пытаюсь получить первые 10 строк и столбцов bigArray в smallArray, но я не уверен, является ли циклический просмотр массива наиболее эффективным методом.

Ответы [ 3 ]

4 голосов
/ 08 октября 2008

Вы должны создать новый массив нужного размера (в вашем коде вы уже сделали это) и скопировать содержимое. Я не уверен, что операция «сжатия» должна сделать в вашем случае. Однако вы не можете изменять размеры существующего массива.

Предложенная вами функция неисправна, так как не может знать размеры целевого массива. Либо вы передаете ему размеры и размерность нового массива внутри, либо вы передаете ему целевой массив и просто копируете содержимое.

Edit:

В ответ на ваше редактирование: Да, цикличное выполнение будет разумным способом сделать это, и это также достаточно быстро. Мне неизвестен механизм блочного копирования в .NET, который можно применять к многомерным массивам.

1 голос
/ 08 октября 2008

Зависит от того, что вы хотите, чтобы выполняла функция сжатия. Вы должны создать новый массив и сделать копию, основываясь на ваших критериях. Я предполагаю, что у вас есть 2d массив по причине, верно? Копия может быть либо пустяком (найти следующее местоположение с ненулевым значением и поместить его в следующее доступное место в цели), либо на основе чего-то еще. Можете ли вы предоставить больше информации?

0 голосов
/ 10 января 2011

Да, лучший способ почти наверняка состоит в том, чтобы циклически проходить по каждой ячейке, хотя может быть возможно скопировать последовательность каждой «строки». Метод должен знать более низкие индексы квадрата, который должен быть скопирован из исходного квадрата, и размер (который может подразумеваться в определении квадрата назначения).

...