0

2次元配列を1次元配列に平坦化しようとしています。これは私が現在持っているものです。1次元配列が次のようになるように、配列を平坦化したいと思います。

   int[] oneDim = {1, 2, 3, 4, 5, 6, 7, 8 ,9 ,10, 11, 12};

これは私が現在持っているものです。私はこれをどうやってやるのか本当にわかりません。すべてのヘルプと入力をいただければ幸いです。

   void setup() {
   int[][] twoDim = { {1, 2, 3, 4},
                      {5, 6, 7, 8},
                      {9, 10, 11, 12} }; 

   int[] oneDim = new int[twoDim.length];
   for (int i = 0; i < twoDim.length; i++) {
      for (int j = 0; j < twoDim[i].length; j++) {
        oneDim[j] += twoDim[j][i];
      }                  
    }
   println(oneDim);
  }
4

2 に答える 2

1

ヒントは次のとおりです。2つの次元を1つにマッピングするための通常の式は次のとおりですwidth*y + x。ここで、widthは各行の要素の数です(4、この場合、twoDim[i].lengthすべて同じ長さであると仮定すると、で与えられます)、'x'は列(jあなたの場合)yの反復子であり、行(あなたの場合)の反復子iです。

1次元配列のサイズが、のすべての要素を受け入れるのに十分であることを確認する必要がありますtwoDim。そのままでは十分な大きさではありませんtwoDim[i].length * twoDim.length。少なくとも要素の長さである必要があります。

oneDim[j]外側のループの反復ごとに内側のループにを割り当てるため、現在、同じ行のデータを何度も繰り返し書き込んでいます。oneDim代わりに、この回答の冒頭で提案した式を使用して、(適切なサイズになったら)に割り当ててみてください。

于 2012-11-06T01:37:58.690 に答える
1
int[][] twoDim = { {1, 2, 3, 4},
                   {5, 6, 7, 8},
                   {9, 10, 11, 12} }; 
int x = twoDim.length;
int y = twoDim[0].length;
int[] oneDim = new int[x*y];
for (int i = 0; i < x; i++) {
  for (int j = 0; j < y; j++) {
    oneDim[i*y + j] = twoDim[i][j];
  }
}
println(oneDim);
于 2012-11-06T01:42:30.527 に答える