2

ループは別として。複数の 1D 配列から 2D 配列をインスタンス化する効率的な方法はありますか。

1D 配列は、2D 長方形配列の列ベクトルとして動作する必要があります。したがって、列 0 = 最初の 1D 配列、列 1 = 2 番目の 1D 配列など...

私も試しましSystem.Buffer.BlockCopyたが、ブロックコピーは単一の1D配列を複数の列にロールバックしますが、これは私が望むものではありません。

どのように変換したいかの簡単な例:

var c1 = new int[] {1, 2, 3, 4};
var c2 = new int[] {5, 6, 7, 8};
var result = new int[,]
            {{1,5},
             {2,6},
             {3,7},
             {4,8}};
4

2 に答える 2

0

unsafeコードとポインターを使用したループは、C# が提供できる高速なアプローチです。unsafeこの場合、現在の JIT では排除できない境界チェックを排除するため、使用します。

書き込み時に、メモリ順に 2D 配列を順次ループします。これは、列ごとではなく行ごとに記述する必要があることを意味します。このトリックにより、メモリ アクセスが最適化され、アドレスを毎回計算する代わりに、書き込みポインターをインクリメントするだけで済みます ( y*width+y)。

于 2013-07-14T19:23:33.077 に答える