C# Listのサンプル

C#のListのサンプルです。

確認環境
・Microsoft Visual Studio Community 2017

目次

仕組み Listクラス
  ListとArrayListの違い
初期値 要素を初期値でセットする
取得する 要素を取得する
  要素をすべて取得する(foreach文)
  指定の要素があるかを返す (Containsメソッド)
  インデックスを取得する(IndexOfメソッド)
  要素数を取得する (Countメソッド)
追加する 末尾に要素を追加する(Addメソッド)
  位置を指定して要素を追加する(Insertメソッド)
更新する 要素を置き換える
削除する インデックスを指定して要素を削除する (RemoveAtメソッド)
  値を指定して要素を削除する (Removeメソッド)
  範囲を指定して要素を削除する(RemoveRangeメソッド)
  すべての要素を削除する (Clearメソッド)
ソート 要素を逆順にする(Reverseメソッド)
  メソッドの引数と戻り値がリストの場合
  リストの中にリストがあるサンプル
配列 リストから配列にコピーする(ToArrayメソッド)

Listクラス

  • 1つの変数で同じ型の複数の値を保持できます。
  • 各項目を要素(element)といいます。
  • 要素の順序をインデックス(添字)で管理します。上記図では[0]、[1]、[2]、[3]がインデックスです。
  • サイズをあとから動的に変更できます。
  • スレッドセーフではありません。
  • 以下はMicrosoftのC#のListクラスのリンクです。
    https://msdn.microsoft.com/ja-jp/library/6sh2ey19(v=vs.110).aspx

ListとArrayListの違い

ListとArrayListの違いのサンプルです。

using System;
using System.Collections.Generic;
using System.Collections;
class Test1
{
    static void Main()
    {
        var a= new ArrayList();
        a.Add("赤");
        a.Add(1);

        var b= new List<string>();
        b.Add("赤");
        //b.Add(1); エラー
    }
}

8行目は、ArrayListです。
9,10行目のように異なる型の値を代入できます。

12行目は、Listです。ジェネリクスでstringを指定しています。
13,14行目は、string型の値のみ代入できます。

要素を初期値でセットする

要素を初期値でセットするサンプルです。

using System;
using System.Collections.Generic;

class Test1
{
    static void Main()
    {
        var a= new List<string>(){ "赤", "黄", "青" };

        foreach (var b in a)
        {
            Console.WriteLine(b);// 赤 黄 青
        }
    }
}

8行目は、Listクラスをインスタンス化し、かつ初期値をセットしています。代入する変数はvarで宣言できます。
10~13行目は、foreach文で値を取得しています。

要素を取得する

要素を取得するサンプルです。

using System;
using System.Collections.Generic;

class Test1
{
    static void Main()
    {
        var a= new List<string>();
        a.Add("赤");
        a.Add("黄");
        a.Add("青");

        Console.WriteLine(a[1]);// 黄
    }
}

13行目は、インデクサー([1])で要素の位置を指定して要素を取得しています。
要素の位置は、赤=0、黄=1、青=2です。

要素をすべて取得する(foreach文)

要素をすべて取得するサンプルです。

using System;
using System.Collections.Generic;

class Test1
{
    static void Main()
    {
        var a = new List<string>();
        a.Add("赤");
        a.Add("黄");
        a.Add("青");

        foreach (var b in a)
        {
            Console.WriteLine(b);// 赤 黄 青
        }
    }
}

13行目は、foreach文ですべての要素を取得しています。

指定の要素があるかを返す (Containsメソッド)

指定の要素があるかを返すサンプルです。

using System;
using System.Collections.Generic;

class Test1
{
    static void Main()
    {
        var a = new List<string>();
        a.Add("赤");
        a.Add("黄");
        a.Add("青");

        if (a.Contains("青")){
            Console.WriteLine("Trueです"); //Trueですと出力される
        }
    }
}

13行目は、Containsメソッドで指定の要素があるかを取得しています。
ある場合trueです。

インデックスを取得する(IndexOfメソッド)

指定した値のインデックスを取得するサンプルです。

using System;
using System.Collections.Generic;

class Test1
{
    static void Main()
    {
        var a = new List<string>();
        a.Add("赤");
        a.Add("黄");
        a.Add("青");

        Console.WriteLine(a.IndexOf("黄")); // 1が出力される
    }
}

13行目は、IndexOfメソッドで指定の値があるインデックスを取得します。
インデックスは0から始まります。

要素数を取得する (Countメソッド) 

要素数を取得するサンプルです。

using System;
using System.Collections.Generic;

class Test1
{
    static void Main()
    {
        var a= new List<string>();
        a.Add("赤");
        a.Add("黄");
        a.Add("青");

        Console.WriteLine(a.Count);// 3
    }
}

13行目は、Countメソッドで要素数を取得しています。

末尾に要素を追加する(Addメソッド)

Addメソッドは、リストの末尾に要素を追加します。

using System;
using System.Collections.Generic;

class Test1
{
    static void Main()
    {
        var a= new List<string>();
        a.Add("赤");
        a.Add("黄");
        a.Add("青");

        foreach (var b in a)
        {
            Console.WriteLine(b);// 赤 黄 青
        }
    }
}

8行目は、Listクラスをインスタンス化しています。
9~11行目は、Addメソッドでリストの末尾に要素を追加しています。
15~18行目は、foreach文で値を取得しています。

位置を指定して要素を追加する(Insertメソッド)

Insertメソッドは、リストの位置を指定して要素を追加します。

using System;
using System.Collections.Generic;

class Test1
{
    static void Main()
    {
        var a= new List<string>();
        a.Add("赤");
        a.Add("黄");
        a.Add("青");

        a.Insert(0, "オレンジ");

        foreach (var b in a)
        {
            Console.WriteLine(b);// オレンジ 赤 黄 青
        }
    }
}

13行目は、Insertメソッドでリストの位置を指定して要素を追加しています。先頭の位置は0です。

要素を置き換える

要素を置き換えるサンプルです。

using System;
using System.Collections.Generic;

class Test1
{
    static void Main()
    {
        var a = new List<string>();
        a.Add("赤");
        a.Add("黄");
        a.Add("青");

        a[1] = "オレンジ";

        foreach (var b in a)
        {
            Console.WriteLine(b);// 赤 オレンジ 青
        }
    }
}

13行目は、インデクサー([1])で要素の位置を指定して要素を置き換えています。
要素の位置は、赤=0、黄=1、青=2です。

インデックスを指定して要素を削除する (RemoveAtメソッド)

RemoveAtメソッドは、インデックスを指定して要素を削除します。

using System;
using System.Collections.Generic;

class Test1
{
    static void Main()
    {
        var a= new List<string>();
        a.Add("赤");
        a.Add("黄");
        a.Add("青");

        a.RemoveAt(0);

        foreach (var b in a)
        {
            Console.WriteLine(b);// 黄 青
        }
    }
}

13行目は、RemoveAtメソッドでインデックスを指定して削除しています。インデックスは0から始まります。

値を指定して要素を削除する (Removeメソッド)

Removeメソッドは、値を指定して要素を削除します。

using System;
using System.Collections.Generic;

class Test1
{
    static void Main()
    {
        var a = new List<string>();
        a.Add("赤");
        a.Add("黄");
        a.Add("青");

        a.Remove("黄");

        foreach (var b in a)
        {
            Console.WriteLine(b);// 赤 青
        }
    }
}

13行目は、Removeメソッドで値を指定して削除しています。

範囲を指定して要素を削除する(RemoveRangeメソッド)

RemoveRangeメソッドは、リストの範囲を指定して要素を削除します。

using System;
using System.Collections.Generic;

class Test1
{
    static void Main()
    {
        var a = new List<string>();
        a.Add("赤");
        a.Add("黄");
        a.Add("青");
        a.Add("緑");

       a.RemoveRange(1,2);

        foreach (var b in a)
        {
            Console.WriteLine(b);// 赤 緑
        }
    }
}

14行目は、RemoveRangeメソッドでリストの範囲を指定して要素を削除しています。
1つめの引数はインデックスで、2つめの引数は要素の数です。
インデックスは0から始まります。

すべての要素を削除する (Clearメソッド)

すべての要素を削除するサンプルです。

using System;
using System.Collections.Generic;

class Test1
{
    static void Main()
    {
        var a= new List<string>();
        a.Add("赤");
        a.Add("黄");
        a.Add("青");

        a.Clear();

        Console.WriteLine(a.Count);// 0
    }
}

13行目は、Clearメソッドですべての要素を削除しています。

要素を逆順にする(Reverseメソッド)

要素を逆順にするサンプルです。

using System;
using System.Collections.Generic;

class Test1
{
    static void Main()
    {
        var a= new List<string>() { "赤", "黄", "青" };

        a.Reverse();

        foreach (var b in a)
        {
            Console.WriteLine(b);// 青 黄 赤
        }
    }
}

10行目は、Reverseメソッドで要素を逆順にしています。

メソッドの引数と戻り値がリストの場合

メソッドの引数と戻り値がリストの場合です。

using System;
using System.Collections.Generic;

class Test1
{
    static void Main()
    {
        var color = new List<string>();
        color.Add("赤");
        color.Add("黄");
        color.Add("青");

        var b = new List<string>();
        b = printColor(color);
    }

    private static List<string> printColor(List<string> a)
    {
        return a;
    }
}

14行目は、呼び出し元のメソッドです。引数にリストを指定しています。戻り値もリストです。
17行目は、定義されたメソッドです。「List<string> a」のaが変数で、その前がデータ型のリストです。

呼び出し元のメソッドの引数の変数名(14行目のcolor)と定義されたメソッドの引数の変数名(17行目のa)は異なっていても使用できます。

リストの中にリストがあるサンプル

リストの中にリストがあるサンプル

using System;
using System.Collections.Generic;

class Test1
{
    static void Main()
    {
        var list1 = new List<List<string>> ();

        var list2 = new List<string>();
        list2.Add("赤");
        list2.Add("黄");
        list2.Add("青");

        var list3 = new List<string>();
        list3.Add("red");
        list3.Add("yellow");
        list3.Add("blue");

        list1.Add(list2);
        list1.Add(list3);

        Console.WriteLine(list1[0][0]); // 赤
        Console.WriteLine(list1[0][1]); // 黄
        Console.WriteLine(list1[0][2]); // 青
        Console.WriteLine(list1[1][0]); // red
        Console.WriteLine(list1[1][1]); // yellow
        Console.WriteLine(list1[1][2]); // blue
    }
}

8行目は、リストの中にリストを定義しています。
10~18行目は、通常のリストを作成しています。
20,21行目は、リストにリストを追加しています。
23~28行目は、リストの値を取得しています。

リストから配列にコピーする(ToArrayメソッド)

リストから新しい配列にコピーするサンプルです。

using System;
using System.Collections.Generic;

class Test1
{
    static void Main()
    {
        var a= new List<string>() { "赤", "黄", "青" };

        string[] b= a.ToArray();

        //b.Add("オレンジ"); リストでないのでエラーになる
    }
}

8行目は、Listです。
10行目は、ToArrayメソッドでリストを新しい配列にコピーしています。

関連の記事

C# Dictionaryのサンプル
C# HashSetのサンプル

△上に戻る