徳島ゲーム開発ごっこ 技術ブログ

ゲームを作るために役に立ったり立たなかったりする技術を学んでいきます!

【C#,LINQ】ToList~シーケンスからリストを作りたいとき~

 C#のLINQの関数であるToList()の使い方についてです。
 配列やリストなどのシーケンスからリストを作ることが出来ます。
f:id:urahimono:20180701235434p:plain


この記事には.NET Framework 4.6.1を使用しています。

リストを作る!

 リストが欲しい!
 手元に配列やIEnumerable<T>はあるけど、俺が欲しいのはList<T>なんだ!
 そんなときはLINQToList()を使うことで、願望をかなえることが出来ます。

public static List<TSource> ToList<TSource>( this IEnumerable<TSource> source );
Enumerable.ToList(TSource) メソッド (IEnumerable(TSource)) (System.Linq)

 使い方は簡単で、IEnumerable<T>を継承したクラスがToList()を呼ぶだけ。

Program.cs

using System.Linq;
using System.Collections;
using System.Collections.Generic;

public static class Program
{
    static void Main( string[] args )
    {
        // いろんなデータを……。
        List<float>         dataA   = new List<float>() { 0.1f, 2.3f, 6.7f };
        IEnumerable<int>    dataB   = Enumerable.Range( 0, 10 );
        string[]            dataC   = new string[] { "正一郎", "清次郎", "誠三郎", "征史郎" };

        // 全部リストに変えちゃえ!
        List<float>     listA  = dataA.ToList();
        List<int>       listB  = dataB.ToList();
        List<string>    listC  = dataC.ToList();

        // 結果発表
        System.Console.WriteLine( "dataA:{0}", dataA.Text() );
        System.Console.WriteLine( "listA:{0}", listA.Text() );

        System.Console.WriteLine( "dataB:{0}", dataB.Text() );
        System.Console.WriteLine( "listB:{0}", listB.Text() );

        System.Console.WriteLine( "dataC:{0}", dataC.Text() );
        System.Console.WriteLine( "listC:{0}", listC.Text() );

        // 入力待ち用
        System.Console.ReadKey();
    }

    /// <summary>
    /// 簡易的なシーケンスのテキスト取得処理
    /// </summary>
    public static string Text( this IEnumerable i_source )
    {
        string text = string.Empty;
        foreach( var value in i_source )
        {
            text += string.Format( "[{0}], ", value );
        }
        return text;
    }

} // class Program

dataA:[0.1], [2.3], [6.7],
listA:[0.1], [2.3], [6.7],
dataB:[0], [1], [2], [3], [4], [5], [6], [7], [8], [9],
listB:[0], [1], [2], [3], [4], [5], [6], [7], [8], [9],
dataC:[正一郎], [清次郎], [誠三郎], [征史郎],
listC:[正一郎], [清次郎], [誠三郎], [征史郎],

 List<T>からList<T>を作る事だってできちゃいます。
 是非ともToList()を七兆回ほど使って、世の中をリストだらけにしてみてください。

LINQのリンク