「こんにちは、私のとても賢い生徒よ!」

「こんにちは、リシ!」

「配列についての新しい議論を待ち望んでいますか? さて、今日は皆さんのために議論したいと思います! 今日はギザギザ配列と多次元配列についてお話します。」

「血に飢えていて恐ろしいようですね。」

「心配しないでください。本物のプログラマーは、たとえ歯をむき出しにしても、常に配列を扱うことができます。冗談はさておき、配列のギザギザは、2 次元配列の行を交換するだけでなく、配列を構築する能力も反映しています。」ただし、そうである必要があります。

「2 次元配列の最初の行の長さを 10 にし、2 番目の行の長さを 50 にしたいとします。」

「本当にそんなことができるの?」

「もちろんです! まず、「コンテナのコンテナ」を作成します。これが最初の配列であり、行の配列への参照を保存します。これがどのように行われるかです。

int[][] name = new int[height][];

2 番目の次元を省略するだけで、Java マシンはコンテナーのコンテナーを作成します。これは、このコードの実行後にメモリ内に格納される内容です。

「そして、あなたはすでに 1 次元配列の作成方法を知っています 🙂

結果のコードは次のようになります。

// Matrix of important data
int[][] matrix = new int[2][];
matrix[0] = new int[10];
matrix[1] = new int[50]
2次元配列0行目は要素

の配列 1行目は要素の配列10
50

「いわゆる「ギザギザ」の配列を作成しました。その端は粗くて不規則です。

「そして、この配列のすべての要素を画面上に表示したい場合は、配列のlength配列が便利です。結局のところ、配列の行の長さは異なります。

「ところで、この例の『コンテナのコンテナ』の長さを調べる方法を教えてください。これは配列オブジェクトでもあります。つまり、長さがあるということです。」

「もしかしてmatrix.length?」

「その通りです。行を形成する配列については、matrix[0].length0 番目の行に使用します。」

「そして最初に、それはmatrix[1].length?を使用することを意味します。」

「その通りです。最初の場合、コマンドを実行すると 10 が生成され、2 番目の場合、結果は 50 になります。

2 次元配列の操作

「では、二次元配列を表示してみましょう:

int[][] matrix = new int[3][];
matrix[0] = {1, 2, 3, 4, 5, 6};
matrix[1] = {1, 2, 3};
matrix[2] = {1};
for (int i = 0; i < matrix.length; i++)
{
   for (int j = 0; j < matrix[i].length; j++)
      System.out.print( matrix[i][j] + " " );
   System.out.println();
}
配列を作成します。配列
に値を入力します。


配列の行を反復する外側のループ。
単一行のセルを反復する内部ループ。

「ご覧のとおり、入れ子になったループが 2 つ必要です。最初のループを external と呼び、2 番目のループをinnerと呼びます。

"外側のループ (i変数) では、2 次元配列を構成するすべての行 (配列) を順番に調べます。 の各値は、iそのインデックスを持つ行に対応します。

"内側のループ (変数j) では、行内のすべてのセルを反復処理します。内側のループのおかげで、1 つの 1 次元配列の値で構成される行が画面に表示されます。

「次のように表示されます。

配列の 1 行が処理されます 1 2 3 4 5 6
配列の 2 行が処理されます 1 2 3 4 5 6
1 2 3
配列の 3 行が処理されます 1 2 3 4 5 6
1 2 3
1

多次元配列

「アミーゴ! 2 次元の配列があるなら、3 次元の配列も存在できると思いましたか?

「ちょうどそれを考えていたんですが、恥ずかしくて聞けませんでした。

「はい、3 次元配列、そして一般的には任意の次元の配列を作成できます。そのような配列は「多次元」と呼ばれます。ちょっとした楽しみのために、4 次元の多次元配列を作成してみましょう。

 int[][][][] matrix = new int[2][3][4][5];

「それはそれほど難しいことではないようです!」

「まだ手動で作成しようとしていません! ここで、これを見て楽しんでください:

int[][][][] matrix;
matrix = new int[2][][][];                   // Create a 2-element array of references to references to references
for (int i = 0; i < matrix.length; i++)
{
  matrix[i] = new int[3][][];                // Create a 3-element array of references to references
  for (j = 0; j < matrix[i].length; j++)
  {
    matrix[i][j] = new int[4][];             // Create a 4-element array of references
    for (k = 0; k < matrix[i][j].length; k++)
      matrix[i][j][k] = new int[5];          // Create 5-element arrays of integers
  }
}

「それは単に配列を作成しているだけです。それから、何らかの方法で配列を操作する必要もあります。」

「私は自分の発言を撤回します。彼らと協力するのはそれほど簡単ではありません。しかしそれは可能です。」

「それは可能ですので、ボーナス タスクをご紹介します。3 次元配列内のすべての値を表示するコードを作成します。これを行うには十分な知識があります。重要なことは、忍耐強く注意を払うことです。あるいは、機知に富むことかもしれません (秘密の部分があります)このタスクを 1 行で解決するのに役立つ知識が含まれています)。ただし、どのように解決するかは関係なく、必ず解決してください。」

「ありがとう、リシ。やってみます。」