TIPS:Listに要素を追加/挿入するには?[C#/VB]List<T>オブジェクト作成時にList<T>コレクションに要素を追加する方法や、Add/AddRangeメソッドやInsert/InsertRangeメソッドを使いList<T>コレクションに要素を追加する方法を紹介する。T)(VB)クラス(System.Collections.Generic名前空間)であろう(以降、型引数はC#での表記だけとさせていただく)。本稿では、List<T>オブジェクトに要素を追加する方法を整理して解説する。まとめて追加できたり任意の場所に挿入できたりと、多くのバリエーションがあるのだ。2.0で導入されたものだが、本稿はそれ以降の内容も含んでいる。2015(またはそれ以降)が必要である。Listに要素を追加するには?大きく分けて3通りある。初期化時に要素を与える方法、Addメソッド/AddRangeメソッドを使って末尾に追加する方法、そしてInsertメソッド/InsertRangeメソッドを使って任意の場所に挿入する方法である(次のコード)。3番目から複数を挿入Listに要素を追加する方法(上:C#、下:VB)末尾に追加するにはAddメソッド/AddRangeメソッドを、途中に挿入するにはInsertメソッド/InsertRangeメソッドを使う。Insertメソッド/InsertRangeメソッドは第1引数で指定したインデックスの位置に要素を挿入するものだが、最後のインデックス+1(=Listに含まれている要素数)も指定できる。これには、例えばソート順に従って位置を決めて要素を挿入する処理を書くときに、途中に挿入する場合と末尾に追加する場合とを区別しなくてよいというメリットがある。実際に、stringオブジェクトを格納するList<string>コレクションで動作を確認してみよう。次のコードは、初期化時に要素を与える方法を使ったコンソールアプリの例だ。後のサンプルコードでも使うため、「DisplayItems<T>」メソッドを切り出してある。1番目の既存のコレクションをコンストラクタに与える方法は、実際のコードでもよく使われる。2番目のコレクション初期化子を使う方法は、製品のコードではあまり見かけないかもしれないが、ユニットテストのコードではよく使われる。ModuleList<string>コレクションの初期化時に要素を与える方法(上:C#、下:VB)配列はIEnumerable<T>インタフェースを実装しているので、文字列の配列はIEnumerable<string>型の「strings」変数へ代入できる。List<T>クラスのコンストラクタ引数には、IEnumerable<T>型のコレクションを渡せる。そのことを強調するため、ここでは文字列配列をIEnumerable<string>型の変数にいったん代入している。文字列配列をList<T>クラスのコンストラクタ引数に直接渡しても構わない。TIPS:構文:コレクションのインスタンス化と同時に要素を追加するには?[C#/VB]」をご覧いただきたい(この記事では、strings変数に代入している右辺の「配列初期化子」についても解説している)。2015からのものだ。6.0]」をご覧いただきたい。TIPS:VB.NETでクラス名を省略してメソッドや定数を利用するには?」で解説している。14で追加された補間文字列機能を使用する」)を見てほしい。Studioでコンソール・アプリケーションのデバッグ実行時にコマンド・プロンプトを閉じないようにするには?」をご覧いただきたい。6.0]」で解説している。Addメソッド/AddRangeメソッドを使う例Addメソッドは、List<T>コレクションの末尾に1個だけ要素を追加する。AddRangeメソッドは、既存のコレクションに格納されている複数の要素をList<T>コレクションの末尾に追加する(次のコード)。Eachループの中で既存のコレクションから要素を取り出してはAddメソッドで追加していくというコードをよく見かけるが、次のコードの最後の例のようにLINQ拡張メソッドを併用してAddRangeメソッドで書けることも多い。3.0]」をご覧いただきたい。Insertメソッド/InsertRangeメソッドを使う例Insertメソッドは、List<T>コレクションの任意の場所に1個だけ要素を挿入する。InsertRangeメソッドは、既存のコレクションに格納されている複数の要素をList<T>コレクションの任意の位置から連続して挿入する(次のコード)。Insertメソッドで指定できるインデックスは、その時点でのListコレクションの最大インデックスの次の値(例えば4個の要素が格納されているときは「4」)までとなっている。これにより、コレクションの途中に挿入するときも末尾に追加するときもInsertメソッドだけで済ませられるのである。ソート順を維持したまま要素を挿入していくようなコードを書くときに重宝する。5番目Insertメソッド/InsertRangeメソッドを使う例(上:C#、下:VB)まとめListに要素を追加するには、初期化時に要素を与える方法、Addメソッド/AddRangeメソッドを使って末尾に追加する方法、そしてInsertメソッド/InsertRangeメソッドを使って任意の場所に挿入するという3通りの方法がある。Eachループの中で逐一Addメソッドを使って要素を追加しているコードは、AddRangeメソッドを使ってシンプルに書き換えられるかもしれない。Insertメソッドでは末尾の要素のその後ろに挿入(すなわち、末尾に追加)できることも覚えておいてもらいたい。メールマガジンをご購読ください。申し込みページへITmediaはアイティメディア株式会社の登録商標です。