配列の代わりとしてのコレクション
更新 : 2007 年 11 月
コレクションは、通常は オブジェクト型 (Object) の操作に使われますが、任意のデータ型の操作にも使用できます。配列よりもコレクションにアイテムを格納した方が効率的な場合もあります。
配列のサイズを変更する必要がある場合、ReDim ステートメント (Visual Basic) を使用する必要があります。これを行うと、Visual Basic により新しい配列が作成され、前の配列が解放されて廃棄されます。これには、実行時間がかかります。したがって、操作を行う項目の数が頻繁に変更される場合、または必要な項目の最大数を予測できない場合、コレクションを使用するとパフォーマンスが向上します。
コレクションは、新しいオブジェクトを作成したり、既存の要素をコピーする必要がないため、ReDim を使用する必要がある配列よりも、短い実行時間でサイズ変更の処理ができます。サイズが変更されない場合、またはほとんど変更されない場合、配列の方がより効率的です。通常どおり、パフォーマンスは個々のアプリケーションに大きく依存します。配列とコレクションの両方を試してみる価値はあります。
専用コレクション
また、.NET Framework には、さまざまなクラス、インターフェイス、および構造体が、一般的および特殊なコレクション用に用意されています。System.Collections および System.Collections.Specialized 名前空間には、ディクショナリ、一覧、キュー、およびスタックを含む、定義および実装が含まれています。System.Collections.Generic 名前空間には、1 つ以上の型の引数を指定できる、これらのジェネリック バージョンが数多く用意されています。
コレクションが特定のデータ型だけの要素を保持する場合、ジェネリック コレクションはタイプ セーフを強制するという点で有利です。ジェネリックの詳細については、「Visual Basic におけるジェネリック型」を参照してください。
例
説明
.NET Framework のジェネリック クラス System.Collections.Generic.List<T> を使用して、customer 構造体の一覧コレクションを作成するコード例を次に示します。
コード
' Define the structure for a customer.
Public Structure customer
Public name As String
' Insert code for other members of customer structure.
End Structure
' Create a module-level collection that can hold 200 elements.
Public custFile As New List(Of customer)(200)
' Add a specified customer to the collection.
Private Sub addNewCustomer(ByVal newCust As customer)
' Insert code to perform validity check on newCust.
custFile.Add(newCust)
End Sub
' Display the list of customers in the Debug window.
Private Sub printCustomers()
For Each cust As customer In custFile
Debug.WriteLine(cust)
Next cust
End Sub
コメント
custFile コレクションの宣言により、customer 型だけの要素を含むことができることを指定します。また、200 要素分の初期容量も用意されています。addNewCustomer プロシージャにより、新しい要素の有効性がチェックされ、コレクションに追加されます。printCustomers プロシージャでは、コレクションを走査し、その要素を表示するために、For Each ループが使用されます。