質問の背景
コレクション List(Of T) は、VB.NETで古いコレクションの代替として導入され、型安全性、サイズの動的変更、インデックスによる高速なアクセスを提供します。リストを使用することで、データを構造化し、型付き要素で操作し、汎用的なコレクションに関連する一般的なエラーを回避できます。
問題
初心者は、リストの要素に正しくアクセスする方法、要素を追加・変更・削除する方法、インデックスを誤って使用したときに何が起こるか(例えば、リストの範囲を超えること)を理解していないことがよくあります。これにより、プログラムの実行中に例外が発生します。
解決策
List(Of T) では、要素はゼロからインデックス付けされます。要素へのアクセスは、読み取りと書き込みの両方においてインデックスを使用します。無効なインデックスの場合は、ArgumentOutOfRangeExceptionが発生します。コレクションのメソッドを使用することで、安全に要素を操作できます。
コード例:
Imports System.Collections.Generic Dim numbers As New List(Of Integer)() numbers.Add(10) numbers.Add(20) Dim first As Integer = numbers(0) ' インデックス0の要素を取得 numbers(1) = 99 ' インデックス1の要素を設定 ' 削除 numbers.RemoveAt(0) ' インデックスで削除
主な特徴:
List(Of T)の要素数と等しいインデックスにアクセスした場合、最後の要素を取得できますか?
いいえ。インデックスは0から始まり、最大の有効インデックスは(Count - 1)です。Countに等しいインデックスにアクセスすると、ArgumentOutOfRangeExceptionエラーが発生します。
既存のデータを削除することなくList(Of T)の中央に要素を追加できますか?
はい、Insertメソッドを使ってできます:
numbers.Insert(1, 42) ' 42を2番目の位置に挿入し、他の要素を右にシフト。
For Eachを使用しているときにList(Of T)のコレクションを変更することは危険ですか?
危険です。InvalidOperationExceptionが発生します。そのような操作にはインデックスを使ったForを使用するか、削除のためのリストを最初に作成してください。
プログラムはFor Eachを使用してList(Of T)を繰り返し、イテレーション内で要素を削除します。
長所:
短所:
コードはForを使って要素を最後から最初に繰り返し、適切なオブジェクトを削除します。
長所:
短所: