配列処理

[VB.NET] List(配列)を2次元配列のように使用する方法

今回は、VB.NETでList(配列)を2次元配列のように使用する方法についてご紹介します。

Listを使って2次元配列を扱うメリット

VB.NETでは、多次元配列を宣言して固定サイズの行列を扱う方法があります。

一方で、Listを用いることで、サイズの変更や行ごとの要素数が異なる構造(ジャグ配列)を柔軟に扱えるメリットがあります。

2次元配列をListで扱う代表的な方法には、List(Of List(Of T))を用いる方法と、単一のListで2次元をシミュレートする方法があります。

以下でそれぞれの実装例をご紹介します。

List(Of List(Of T))を使った2次元配列の実装

List(Of List(Of T))を用いると、行ごとに内側のListを持つ構造が作れます。

サイズが動的に変化するため、行や列の追加・削除が容易です。

また、行ごとに要素数が異なるジャグ配列としても利用できます。

以下は3行×4列のデータを格納する例です。

実行結果

matrix(1)(2) = 42

このように、外側のListで「行」を管理し、内側のListで「列」を管理します。

行サイズや列サイズを柔軟に変更したい場合に有効です。

単一のListを使った2次元配列のシミュレート

もう1つの方法は、1次元のListに対してインデックスを計算することで2次元的に扱う方法です。

行数と列数が固定、またはほぼ固定の場合に利用しやすい実装です。

以下は3行×4列のデータを用意し、行 × 列数 + 列でインデックスを計算する例です。

実行結果

list(1, 2) = 99

物理的には1次元のメモリ領域を確保するため、連続アクセスが可能です。

ただし、行列数の変更やジャグ配列の実現は容易ではないため、用途によって使い分けることをおすすめします。

Listを2次元配列として扱う際の注意点

ここでは、List(Of List(Of T))と単一のListを2次元的に扱う場合の注意点をまとめます。

  • 境界チェック: 動的なListでもインデックス範囲外アクセスはエラーになります。
  • 初期化のタイミング: List(Of List(Of T))では、内側のListを忘れずに初期化する必要があります。
  • サイズの不揃い: ジャグ配列として使用する場合、各行のサイズが異なると処理時に注意が必要です。
  • パフォーマンス: 大量データを扱う際は、要件に合った実装かどうかを事前に検討しましょう。

まとめ

VB.NETでは、List(Of List(Of T))と単一のListによって柔軟な2次元配列のような構造を実現できます。

行や列の動的な追加・削除を重視するならList(Of List(Of T))、固定的な行列アクセスを重視するなら単一Listがおすすめです。

用途や要件に合わせて最適なアプローチを選択すると、保守性や可読性が向上します。