VB.NETの多次元配列の作り方と活用方法!初心者向け完全ガイド
生徒
「VB.NETでたくさんのデータを整理して管理したいのですが、配列って一つずつ並べるだけなんですか?」
先生
「いいえ、実は『表』のような形式でデータを管理できる『多次元配列』という便利な仕組みがあるんですよ。」
生徒
「表形式ですか?それならエクセルみたいにデータを扱えそうですね!どうやって使うんですか?」
先生
「その通りです。縦と横の広がりを持たせる方法を詳しく解説していきますね!」
1. 多次元配列とは何か?
VB.NETを学ぶ上で、避けて通れないのが「配列(はいれつ)」です。配列とは、同じ種類のデータを一つの箱にまとめて入れておくための棚のようなものです。これまでに学んだ「1次元配列」は、データが一列に並んだ「長い一本の棚」のようなイメージでした。
しかし、実際のプログラミングでは、データが一列だけでは足りない場面が多々あります。そこで登場するのが「多次元配列(たじげんはいれつ)」です。最もよく使われるのは「2次元配列」で、これは数学で習う「行列」や、お仕事で使う「Excel(エクセル)のシート」をイメージすると非常に分かりやすいでしょう。縦(行)と横(列)がある表形式でデータを保存できるのが特徴です。
多次元配列を使うことで、例えばクラス全員の「国語、算数、理科」の点数を一覧表として管理したり、ゲームのマップ情報を座標(縦の位置と横の位置)で管理したりすることができるようになります。プログラミング未経験の方でも、「データを整理するための格子状のマス目」だと考えれば、難しくありません。
2. 2次元配列の宣言と作り方の基本
それでは、具体的にVB.NETで2次元配列を作る方法を見ていきましょう。配列を作ることを専門用語で「宣言(せんげん)」と言います。「これからこういう名前の箱を使いますよ!」という合図ですね。
2次元配列を宣言するときは、カッコの中に「カンマ」を一つ入れます。書き方は以下の通りです。
' 縦(行)が3、横(列)が2の要素を持つ配列を宣言する
' カッコの中の数字は「最大インデックス」を指定します
Dim seiseki(2, 1) As Integer
ここで初心者が最初につまずきやすいのが「添字(そえじ)」、別名「インデックス」の数え方です。プログラミングの世界では、数字は「0」から数え始めます。つまり、(2, 1)と指定した場合、縦は「0, 1, 2」の3つ、横は「0, 1」の2つのスペースが作られることになります。合計で $3 \times 2 = 6$ 個のデータを入れることができます。
このように、カンマを使って縦と横のサイズを指定することで、簡単に表形式のデータ入れ物を用意することが可能です。データ型(ここではInteger=整数)を指定することで、その箱に何を入れるかを決めることができます。
3. 2次元配列に値を代入する方法
箱を用意したら、次はそこにデータを入れなければなりません。この操作を「代入(だいにゅう)」と呼びます。代入するときも、先ほどの「添字(インデックス)」を使って、どの場所にデータを入れるかを指定します。
例えば、出席番号0番の生徒の「算数」の点数を「80点」にしたい場合は、次のように書きます。
' 配列の指定した場所に値を代入する
seiseki(0, 0) = 80 ' 0行0列目に80を入れる
seiseki(0, 1) = 95 ' 0行1列目に95を入れる
seiseki(1, 0) = 70 ' 1行0列目に70を入れる
また、宣言と同時に初期値(最初から入れておきたい値)を設定することも可能です。これを「初期化(しょきか)」と言います。中カッコ{}を二重に使うことで、視覚的にも表のような形で記述できます。
' 宣言と同時に初期値をセットする
Dim scores(,) As Integer = {
{80, 90}, ' 0行目
{75, 85}, ' 1行目
{60, 70} ' 2行目
}
この書き方だと、コードを読んだだけで「あ、これは表になっているんだな」と直感的に理解できるので、非常にオススメです。パソコンを初めて触る方でも、エクセルのセルに数字を打ち込む感覚に近いことがわかるはずです。
4. 多次元配列からデータを取り出す(参照)
データを入れたら、今度はそれを取り出して使ってみましょう。これを取り出すことを「参照(さんしょう)」と言います。参照も代入と同じく、カッコの中に場所(インデックス)を指定するだけです。
以下のサンプルコードでは、配列に入れた値を画面に表示(出力)する方法を紹介します。Console.WriteLineというのは、画面に文字や数字を出すための魔法の言葉だと思ってください。
Module Module1
Sub Main()
' 2行2列の配列を作成
Dim fruits(1, 1) As String
' データを代入
fruits(0, 0) = "りんご"
fruits(0, 1) = "赤い"
fruits(1, 0) = "レモン"
fruits(1, 1) = "黄色い"
' データを取り出して表示
Console.WriteLine(fruits(0, 0) & "は" & fruits(0, 1))
Console.WriteLine(fruits(1, 0) & "は" & fruits(1, 1))
End Sub
End Module
実行結果は次のようになります。
りんごは赤い
レモンは黄色い
このように、特定の場所を指定することで、自由自在にデータを取り出すことができます。文字列(String)も扱えるので、数値だけでなく名前や状態なども管理できてとても便利ですね。
5. 繰り返し処理(For文)と多次元配列の組み合わせ
多次元配列の本領が発揮されるのは、「繰り返し処理(ループ)」と組み合わせたときです。一つずつ手作業で値を表示させるのは大変ですが、コンピュータに任せれば、何百、何千というデータを一瞬で処理できます。
VB.NETでは、For文という命令を使って、繰り返し処理を行います。2次元配列の場合は、外側のループで「行(縦)」を、内側のループで「列(横)」を回す「二重ループ」というテクニックをよく使います。
Dim table(,) As Integer = {{1, 2}, {3, 4}, {5, 6}}
' GetUpperBound(0) は行の最大インデックス、(1) は列の最大インデックスを返します
For i As Integer = 0 To table.GetUpperBound(0)
For j As Integer = 0 To table.GetUpperBound(1)
Console.Write(table(i, j) & " ")
Next
Console.WriteLine() ' 行が終わったら改行する
Next
GetUpperBoundという単語が出てきましたね。これは「その次元の最大数はいくつか?」を調べるための便利な機能です。これを使うことで、配列の大きさが変わっても自動的に最後まで処理してくれる、賢いプログラムになります。
6. 多次元配列を扱う際の注意点とコツ
多次元配列は非常に強力ですが、初心者がハマりやすいポイントもいくつかあります。まず一つ目は、「次元を増やしすぎないこと」です。3次元配列、4次元配列と増やすことは可能ですが、次元が増えれば増えるほど、人間の頭ではイメージしづらくなり、プログラムのミス(バグ)の原因になります。基本的には2次元、どうしても必要なときでも3次元までにとどめておくのが、読みやすいコードを書くコツです。
二つ目は、「配列のサイズは後から変えるのが少し面倒」という点です。一度作った配列の大きさを変えるにはReDimという命令を使いますが、多次元配列の場合は一番最後の次元しかサイズを変更できないという制約があります。そのため、あらかじめ必要な大きさをしっかり考えてから作ることが大切です。
もし、データの数がどんどん増えたり減ったりする場合は、配列ではなく「コレクション」という別の道具を使うことも検討しましょう。ですが、まずはこの多次元配列を使いこなせるようになることが、VB.NET上達への近道です。表形式のデータを扱えるようになると、作れるアプリの幅が一気に広がりますよ!
7. 実践例:九九の表を2次元配列で作ってみよう
最後に、これまでの知識を総動員して、プログラミング学習の定番である「九九の表」を2次元配列に保存して表示するプログラムを作ってみましょう。これは多次元配列の構造を理解するのに最高の練習問題です。
Module Module1
Sub Main()
' 9x9の表を用意(インデックスは0〜8なので、(8, 8)と指定)
Dim kuku(8, 8) As Integer
' 九九の計算結果を配列に代入する
For row As Integer = 0 To 8
For col As Integer = 0 To 8
' 行と列に1を足して計算(1の段〜9の段)
kuku(row, col) = (row + 1) * (col + 1)
Next
Next
' 配列の中身をきれいに表示する
Console.WriteLine("--- 九九の表 ---")
For i As Integer = 0 To 8
For j As Integer = 0 To 8
' Tab文字を使って間隔を揃える
Console.Write(kuku(i, j) & vbTab)
Next
Console.WriteLine() ' 段が変わるごとに改行
Next
End Sub
End Module
このプログラムを実行すると、画面にきれいな九九の表が表示されます。データを計算して保存し、それを後からまとめて表示するという、プログラミングの基本動作がすべて詰まっています。このコードを自分で書き換えて、数字を2倍にしてみたり、表示する範囲を変えてみたりすることで、多次元配列への理解がさらに深まるはずです。