2

C#で2次元配列をより小さなサイズに縮小する効率的な方法は何ですか?

例えば:

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() はどのように記述しますか?

ありがとう!

編集: bigArray の最初の 10 行と列を smallArray に取得しようとしているだけですが、配列のループが最も効率的な方法であるかどうかはわかりません。

4

3 に答える 3

4

目的のサイズの新しい配列を作成し(コードでは、すでにこれを行っています)、コンテンツをコピーする必要があります。あなたの場合、「縮小」操作が何をする必要があるのか​​わかりません。ただし、既存の配列の次元を変更することはできません。

提案した関数は、ターゲット配列の次元を認識できないため、欠陥があります。ディメンションを渡して新しい配列のディメンションを内部的に渡すか、ターゲット配列を渡して内容をコピーするだけです。

編集:

あなたの編集に応じて:はい、ループはこれを行うための合理的な方法であり、これもかなり高速です。多次元配列に適用できる.NETのブロックコピーメカニズムを知りません。

于 2008-10-08T15:57:53.150 に答える
1

縮小機能で何をしたいかによって異なります。新しい配列を作成し、基準に基づいてコピーを作成する必要があります。私の推測では、何らかの理由で 2 次元配列があると思いますよね? コピーはトリビア (0 以外の値を持つ次の場所を見つけて、ターゲット内の次の使用可能な場所に配置する) または何か他のものに基づいている可能性があります。もっと情報を提供できますか?

于 2008-10-08T16:05:22.480 に答える
0

はい、最善の方法はほぼ確実に各セルをループすることですが、各「行」のシーケンスをコピーすることは可能かもしれません。このメソッドは、元の正方形からコピーされる正方形の下位インデックスとサイズ (コピー先の正方形の定義で暗黙的に指定されている可能性があります) を知る必要があります。

于 2011-01-10T14:08:20.827 に答える