0

ByteArray (スクリーンショット データを表す) を 2 次元配列に分割しようとしたので、たとえば 3x3 (xy /rows 列) の配列がある場合

それはこのようになります

int screenSwidth = 3;
int screenSheight = 3;
byte[] ScreenShot = new byte[] {1,2,3,4,5,6,7,8,9};

2 つの入れ子になった for ループを使用して、シリアル データを新しい2 次元配列の別々の行に分割しようとしています。

この例では、新しいScreenShotRows[] を「b」として呼び出すだけです

b[0][0] = 1 b[0][1] = 2 b[0][2] = 3

b[1][0] = 4 b[1][1] = 5 b[1][2] = 6

b[2][0] = 7 b[2][1] = 8 b[2][2] = 9

問題は、配列全体を反復処理する正しい方法は何ですか 。このコードを使用してそれを達成しようとしていました。

     for (int HeightIter= 0; HeightIter < screenSheight; HeightIter++)
     {
           for (int WidthIter = 0; WidthIter < screenSwidth ; WidthIter++)
                {
                     ScreenShotRows[HeightIter, WidthIter] = ScreenShot[WidthIter];
                }
     }

そして、値を代入して最初の行をループします。

b[0][0] = 1 b[0][1] = 2 b[0][2] = 3

b[1][0] = 1 b[0][1] = 2 b[0][2] = 3

b[2][0] = 1 b[0][1] = 2 b[0][2] = 3

これは、ネストされた for ループを使用したこの種の multiDimetional /jagged 配列に対する私の最初の試みであり、それを機能させるには非常に混乱することがわかりました

また、できるだけ早く完了するために、

私のデータは 3x3 よりもはるかに大きく、メソッドは頻繁に複数回呼び出されるため、パフォーマンスが重要です

私の次の動きは、列と同じようにすることです

要素 0,0 から 0,2 ---- 要素 1,0 から 1,2 ---- 要素 2,0 から 2,2

      147                    258                369
4

1 に答える 1

2

最初の行を次のように置き換えます。

for (int HeightIter= 0; HeightIter < screenSheight; HeightIter++)

そして、へのScreenShotRows[HeightIter, WidthIter] = ScreenShot[WidthIter];

ScreenShotRows[HeightIter, WidthIter] = ScreenShot[3*HeightIter+WidthIter];

これにより、2次元配列が作成されます。

于 2012-09-10T20:48:50.260 に答える