0

したがって、ゲームの世界を表す数値の 3D グリッドを表す 1D 配列があり、次のように個々のエントリ (X、Y、Z) にアクセスします。

array[x + width * (y + height * z)]

ループせずに行全体 (たとえば、(1,1) のすべての Z 値) をコピーする方法はありますか (すべてのエントリを既にループしています。空の行をチェックしてパフォーマンスを節約したい (すべての0s) 処理をスキップします)? 可能であれば、ギザギザの配列を使用したくありません。

4

1 に答える 1

0

データ要素がメモリ内の行として直線的に配置されていることを確認する必要があります。

row|row|row...など

次に、質問に記載されているのと同じ種類の配列アクセス演算を使用して、その行のインデックス範囲を決定し、 range を呼び出して、次のようn->mに要素の高速ブロック コピーを実行しn->mます。

  • memcpy- C/C++
  • Array.Copy- C#
  • Arrays.copyOfRange- Java、ネイティブ型に適しています。オブジェクトにはループコピーの方が適している場合があります。

それぞれがnm-nasstartsizeパラメータをそれぞれ取ります。

ほとんどの言語には、内部でネイティブ コードを使用するブロック配列コピーの何らかの実装があります。つまり、ネイティブ コピーを実行します。

于 2014-01-26T19:00:08.947 に答える