共通のリスト操作
リストの操作 への移動
さまざまなリスト クラスがあり、それぞれで異なる型の項目が格納され、異なる派生元を持っていますが、それらのほとんどで、リスト内の項目を追加、削除、再配置、アクセスするための一連の汎用メソッドを、共有しています。
目次 |
リスト項目を追加する
ほとんどのリスト クラスには Add メソッドがあり、項目をリストの末尾か(リストがソートされていない場合)、適切な位置に(リストがソートされている場合)追加します。大抵、Add メソッドは、リストに追加する項目をパラメータとして取り、項目が追加されたリスト内の位置を返します。バケット リスト(TBucketList と TObjectBucketList)の場合、Add は、追加する項目の他に、その項目と関連付けるデータもパラメータとして取ります。コレクションの場合、Add はパラメータを取らず、追加する項目を新規作成します。コレクションの Add メソッドは追加した項目を返すので、その新しい項目のプロパティに値を割り当てることができます。
リスト クラスによっては、Insert メソッドを Add メソッドの他に持っているものもあります。Insert は、Add メソッドと同様に機能しますが、さらにパラメータを持っており、新しい項目を入れたいリストの位置を指定することができます。Add メソッドを持つクラスであれば、項目位置があらかじめ決定されている場合を除き、Insert メソッドも持っています。たとえば、ソートされたリストでは、項目はソート順に従わなければならないので、Insert を使用することはできず、また、バケット リストでは、ハッシュ アルゴリズムが項目の位置を決定するので、Insert を使用することはできません。
Add メソッドを持たない唯一のクラスは、順序付きリストです。順序付きリストは、キューまたはスタックを指します。順序付きリストに項目を追加する場合には、代わりに Push メソッドを使用します。Push は、Add のように項目をパラメータとして取り、それを適切な位置に挿入します。
リスト項目を削除する
単一の項目を、あるリスト クラスから削除するには、Delete メソッドまたは 削除メッドを使用します。Delete は、削除する項目のインデックスをパラメータとして取ります。Remove もパラメータは 1 つですが、そのパラメータは、削除する項目への参照で、インデックスではありません。リスト クラスによっては Delete メソッドのみをサポートしたり、別のものは Remove メソッドのみをサポートし、中には両方をサポートするものもあります。
項目の追加と同様、順序付きリストは、その他すべてのリストとは異なる動作をします。順序付きリストから項目を削除するには、メソッド Delete や Remove を使用する代わりに、Pop メソッドを呼び出します。削除できる項目は 1 つしかないので、Pop に引数はありません。
リスト内の項目をすべて削除したい場合は、Clear メソッドを呼び出します。Clear は、順序付きリスト以外のすべてのリストで利用可能です。
リスト項目にアクセスする
すべてのリスト クラスには(TThreadList および順序付きリスト以外)、リスト内の項目にアクセスするためのプロパティがあります。大抵、このプロパティは Items という名前です。文字列リストの場合、このプロパティは Strings で、バケット リストの場合、Data です。これらプロパティ Items、Strings、Data は、インデックス付きプロパティで、アクセスしたい項目を指定することができます。
TThreadList では、アクセスする前にリストをロックする必要があります。リストをロックする際、LockList メソッドは項目へのアクセスに使用できる TList オブジェクトを返します。
順序付きリストは、リストの「一番上の」項目へのアクセスのみ許可します。この項目への参照は、Peek メソッドを呼び出して取得します。
項目を並び替える
リスト クラスによっては、リスト内の項目群を並び替えるメソッドを持っています。あるものには、2 つの項目の位置を入れ替える Exchange メソッドが、あるものには、項目を指定された位置に移動させる Move メソッドが、そしてあるものには、リスト内の項目群を並び替える Sort メソッドがあります。
どのメソッドが利用可能かを知るには、使用するリスト クラスのオンライン ヘルプを確認してください。