【C#】リスト(List)を定義する方法・使用する方法

「配列」という、一つの変数内に複数の値を格納できるデータ型について紹介しました。配列は便利なので覚えておいたほうがいいです。しかしながら、配列の格納数が固定であったりするなど使い勝手が「本当に優れているか」というとそうとも言えません。

実際のところ、コーディングの現場では配列を使うことは少なくなっており、現在はListと呼ばれるデータの格納方式を多用することが多いです。ここでは「List」の使い方を紹介していきます。実際の現場ではListを多用するので、配列よりも重要といってもよいでしょう。

C#のListとは

まずは簡単にC#でよく使われる「List」の基礎について紹介します。Listは同じデータ型をまとめて扱える機能になります。Listは簡単に要素を追加したり削除することができるので、実際に利用する場面では非常に便利です。

同じような機能として配列がありますが、こちらは値の格納数が固定されているため、値の個数の上限が決まっていないデータを扱う場合などは不利になります。そういう点で近年の現場ではListの使用率が高くなっています。配列よりもこちらを重点的に覚えることをオススメします。

C#でListを使う方法

それではC#でListを使う方法をサンプルコードを交えて解説していきます。とはいえ、まずはListをプログラム内で使用するための準備から始めていきます。新規のコンソールアプリケーションを作成してみましょう。

Genericsの参照を追加する

これまでは特段触れてこなかった、ソースコード内の上の部分に触れたいと思います。「using ×××」という部分ですね。こちらは「usingディレクティブ」と呼ばれるものになります。要するに「機能が配置されている場所」を記述することで、指定した箇所に属する機能を簡単に呼び出せる設定です。

C#におけるListは「Generic」と呼ばれる機能群の中に用意されているため、Listを使用する際はGenericの「場所」を指定して機能を呼び出せるようにしてあげます。それを指し示すのが以下の文言になります。

using System.Collections.Generic;

コンソールアプリケーションではデフォルトで上記のusingディレクティブが設定されているので、特段編集を行う必要がありませんが、もし、開いているソースコードにない場合は上記を記述するようにしてください。

C#で文字列型のListを使う方法

それではソースコードの記述をしていきたいと思います。開いているソースコードに以下のプログラムを記述して実行してみましょう。まずはstring型のListを使用するようにしています。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace App01
{
    class Program
    {
        static void Main(string[] args)
        {
            //Listを宣言する
            List list<string> = new List<string>();

            Console.WriteLine("Listに値を設定します。");

            //Listに値を設定する
            list.Add("John");
            list.Add("Smith");
            list.Add("Mark");

            Console.WriteLine("Listに値の設定が完了しました。");
            Console.WriteLine("・・・・・");
            Console.WriteLine("Listから値を取り出します。");

            //Listの値を表示する
            Console.WriteLine(list[0]);
            Console.WriteLine(list[1]);
            Console.WriteLine(list[2]);

            Console.ReadLine();
        }
    }
}

Listの使用を宣言している箇所は「List<string> list = new List<string>();」の箇所になります。「”< >”」の間に使用したいデータの型を明記することで使用が可能になります。記述の通り、ここではstring型のListを宣言しています。

また、Listに対して値を設定する場合は「.Add();」を使用します。「list.Add(“John”);」の部分になります。「(変数名).Add()」で「Add()」の括弧内に指定した型と同じ型の値のデータを引き渡すことで値が設定されます。

値を取り出す場合は配列と同様に「” [ ] “」の添え字と要素の番号(インデックス)を指定することで取得可能です。こちらも配列と同様にインデックスは0から始まるので注意してください。では、次はint型のListの使い方を見ていきます。

C#でint型のListを使う方法

それでは新しいコンソールアプリケーションを作成してください。int型のListを使う方法について、サンプルコードを記述していきます。今回もfor文を使用してサンプルコードを記述していきます。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace App02
{
    class Program
    {
        static void Main(string[] args)
        {
            //Listを宣言する
            List<int> list = new List<int>();

            Console.WriteLine("Listに値を設定します・・・。");

            //Listに値を設定する
            for (int i = 0; i < 10; i++)
            {
                list.Add(i);
            }

            Console.WriteLine("Listに値の設定が完了しました。");
            Console.WriteLine("続いて、Listから値を取り出します。");

            //Listから値を取り出す
            for (int i = 0; i < 10; i++)
            {
                Console.WriteLine(list[i].ToString());
            }

            Console.WriteLine("値の取り出しが完了しました。");
            Console.ReadLine();
        }
    }
}

Listを宣言している箇所は「List<int> list = new List<int>();」になります。これはstring型の時と同じですね。「”< >”」の中の記述がstringからint型になりました。これでint型のListが使用できるようになります。ほかにもbool型ならば「<bool>」、double型ならば「<double>」になります。

値を設定している箇所ではfor文のループ」を管理している変数iをListの値として設定するようにしてみました。「.Add()」の中はListの型と同じものですので、「list.Add(i)」としています。この時の i は、for文の「int i = 0;」で宣言している通りint型です。

また、値を取り出す際は0から始まるインデックスで取り出しましょう。for文の宣言が「i = 0;」となっているので、問題なくfor文で取り出すことが可能です。これも要素の個数とインデックスでは開始が異なるので注意してください。

要素の個数は1個、2個、3個・・・と数えますが、要素のインデックスは0番目、1番目、2番目になります。数え方とインデックスで間違えがちなので注意しましょう。

Listのカウントを取得する方法

配列では「配列の長さ」を取得できる「プロパティ」が存在するとお伝えしました。「.Length」プロパティは配列の長さを教えてくれる情報です。これと似たような機能がListにもあります。それが「Count」プロパティになります。

配列は「長さ」として「Length」ですが、Listでは「個数」としての「Count」を使用しています。使い方は同じですが、簡単にサンプルを紹介します。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace App03
{
    class Program
    {
        static void Main(string[] args)
        {
            //Listを宣言する
            List list = new List();

            //Listに値を設定する
            list.Add(5);
            list.Add(15);
            list.Add(25);

            //Listの要素数を取得
            int count = list.Count;
            Console.WriteLine("Listの要素は" + count.ToString() + "個です。");

            //Listの中身を出力する
            for(int i = 0; i < list.Count; i++)
            {
                Console.WriteLine("Listの中身:" + i.ToString());
            }
            Console.ReadLine();
        }
    }
}

「Countプロパティ」を使用することで、Listのカウントが可変になっていても、中身の個数に応じて自動でループの繰り返す回数を制御できるようになります。ループなどで値を入力してもらうといったインターフェースと組み合わせる場合は、積極的に「Count」プロパティを使用して継続条件を決めるようにしましょう。

まとめ | Listの使い方

C#でよく使われるListについてサンプルコードとあわせて紹介しました。Listはシステム開発の現場でもよく使われるため、配列よりも覚えておくべき知識です。少なくとも「List」に値を追加する方法、値を取り出す方法、要素の個数を取得する方法は知っておきましょう。

Listの使用を宣言する場合は以下のように記述します。ここでも「new」キーワードが使われていますが、これはそのまま覚えてください。また「”< >”」の間にListとして使用したい型を設定します。

List<(型)> (変数名)= new List<(型)>();

Listに値を追加したい場合は「Add()」を使用します。括弧内にListで指定した型と同様に型を持つデータを指定する必要がありますので、間違えないようにしてください。

(変数名).Add((宣言した型と同じ型の値));

Listに設定されている中身の「個数」を取得するには「Count」プロパティを使用します。これを使用することで瞬時にListの最大個数を知れるので活用しましょう。

(変数名).Count

以上、Listについて基本的に知っておくべきことをまとめました。C#はListを扱うのが非常に得意で、この型を活用することで効率的な開発が可能なプログラミング言語になるので必ず覚えておきましょう。List はモダン・プログラミングにおいて根底となる知識となります。