C# List

C# List

リストは配列に似ています。

配列は長さが決まっていて後から要素を追加・削除することができません。リストは後から要素を追加・削除することができます。(サイズを後から動的に変更できるという特徴がある)

Listの定義方法は以下のように行います。

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

リストを使用するにはusing System.Collections.Generic; を先頭に追加する必要があります。

using System;
using System.Collections.Generic;

public class Hello{
    public static void Main(){
        List<int> list1 = new List<int>();
        
        list1.Add(1);
        
        Console.WriteLine(list1[0]);
        
        List<string> list2 = new List<string> { "apple", "orange", "banana" };
        
        // リストも同様にforeachで要素を1つずつ取り出すことができる
        foreach(var v in list2)
        {
            Console.WriteLine(v);
        }
    }
}

リストの要素数の取得

リストに格納されている要素数を取得するにはCountを使用します。

List<string> list = new List<string> { "apple", "orange", "banana" };
Console.WriteLine(list.Count);

リストの末尾に要素を追加

リストの末尾に要素を追加したい場合はAdd()を使用します。

List<string> list = new List<string> { "apple", "orange" } ;
list.Add("banana");
foreach(var v in list)
{
    Console.WriteLine(v);
}

リストの指定した位置に要素を追加

リストの指定した位置(インデックス)に要素を追加したい場合はInsert()を使用します。

Insertの第1引数には追加したい位置のインデックスを指定します。

List<string> list = new List<string> { "apple", "orange" } ;
list.Insert(1, "banana");
foreach(var v in list)
{
    Console.WriteLine(v);
}

リストの指定した要素を削除

リストから指定した要素を削除する場合はRemove()を使用します。引数には要素の値と同じ値を指定する必要があります。

List<string> list = new List<string> { "apple", "orange", "banana" } ;
list.Remove("orange");
foreach(var v in list)
{
    Console.WriteLine(v);
}

リストのすべての要素を削除

リストのすべての要素を削除する場合はClear()を使用します。

List<string> list = new List<string> { "apple", "orange", "banana" } ;
list.Clear();
foreach(var v in list)
{
    Console.WriteLine(v);
}

リストの要素に指定した値があるか検索

リストに格納されている要素で指定した値があるか検索したい場合はContains()を使用します。指定した値の要素がある場合はtrueを返し、なければfalseを返します。

List<string> list = new List<string> { "apple", "orange", "banana" } ;
Console.WriteLine(list.Contains("orange"));
Console.WriteLine(list.Contains("cherry"));

リストの要素の順序を反転

リストの要素を順序を反転させたい場合はReverse()を使用します。

List<string> list = new List<string> { "apple", "orange", "banana" } ;
list.Reverse();
foreach(var v in list)
{
    Console.WriteLine(v);
}

リストの要素の並べ替え

リストの要素を並べ替えしたい場合はSort()を使用します。昇順(値が小さい順)、降順(値が大きい順)のどちらかを選びます。

  • 昇順
List<int> list = new List<int> { 3, 5, 1, 4, 2 } ;
list.Sort();
foreach(var v in list)
{
    Console.WriteLine(v);
}
  • 降順
List<int> list = new List<int> { 3, 5, 1, 4, 2 } ;
list.Sort((a, b) => b - a);
foreach(var v in list)
{
    Console.WriteLine(v);
}
  • 補足 要素が文字列の場合の降順ソート
List<string> list = new List<string> { "apple", "orange", "banana" } ;
list.Sort((a, b) => b.CompareTo(a));
foreach(var v in list)
{
    Console.WriteLine(v);
}

リストから配列への変換

リストから配列への変換をする場合はToArray()を使用します。

List<string> list = new List<string> { "apple", "orange", "banana" } ;
Console.WriteLine(list.GetType());
var array = list.ToArray();
Console.WriteLine(array.GetType());

リストのメリット

リストはインデックス値による値の読み書きの性能に優れいているという特徴があります。要素の保存位置に関わらず、ほぼ一定の時間でアクセスできます。

リストのデメリット

リストの要素の挿入・削除は先頭に近くなるほど遅くなります。また、挿入に際しては、メモリー(配列)の再割当てが発生する場合があります。リストは一定サイズの領域を準備していますが、要素の追加に伴って領域が不足すると、自動敵に一定量だけサイズを拡張します。

しかし、メモリーの再割り当ては、相応のオーバーヘッドを要する処理です(処理をするにはコストがかかるつまり重いということ)。リストのサイズに比例して処理が重くなります。

課題

C# 入門編4:配列の基礎

参考

「独習C#」6.2 リスト