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

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

【C#,LINQ】ToArray~シーケンスから配列を作りたいとき~

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


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

配列を作る!

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

public static TSource[] ToArray<TSource>( this IEnumerable<TSource> source );
Enumerable.ToArray(TSource) メソッド (IEnumerable(TSource)) (System.Linq)

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

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[] { "正一郎", "清次郎", "誠三郎", "征史郎" };

        // 全部配列に変えちゃえ!
        float[]     arrayA  = dataA.ToArray();
        int[]       arrayB  = dataB.ToArray();
        string[]    arrayC  = dataC.ToArray();

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

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

        System.Console.WriteLine( "dataC :{0}",  dataC.Text() );
        System.Console.WriteLine( "arrayC:{0}", arrayC.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],
arrayA:[0.1], [2.3], [6.7],
dataB :[0], [1], [2], [3], [4], [5], [6], [7], [8], [9],
arrayB:[0], [1], [2], [3], [4], [5], [6], [7], [8], [9],
dataC :[正一郎], [清次郎], [誠三郎], [征史郎],
arrayC:[正一郎], [清次郎], [誠三郎], [征史郎],

 配列から配列を作る事だってできちゃいます。
 是非ともToArray()を七兆回ほど使って、世の中を配列だらけにしてみてください。

LINQのリンク