コガネブログ

平日更新を目標に Unity や C#、Visual Studio などのゲーム開発アレコレを書いていきます

【C#】シーケンスを指定された要素数で分割する拡張メソッド

ソースコード

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

public static class IEnumerableExt
{
    public static IEnumerable<IEnumerable<T>> Chunks<T>
    ( 
        this IEnumerable<T> self, 
        int                 size 
    )
    {
        while ( self.Any() )
        {
            yield return self.Take( size );
            self = self.Skip( size );
        }
    }
}

使い方

var list = new [] 
{
    "フシギダネ"    ,
    "フシギソウ"    ,
    "フシギバナ"    ,
    "ヒトカゲ"      , 
    "リザード"      , 
    "リザードン"    , 
    "ゼニガメ"      , 
    "カメール"      , 
    "カメックス"    , 
};

foreach ( var n in list.Chunks( 3 ) )
{
    Console.WriteLine( string.Join( ", ", n.ToArray() ) );
}

結果

フシギダネ, フシギソウ, フシギバナ
ヒトカゲ, リザード, リザードン
ゼニガメ, カメール, カメックス

参考サイト様

[C#][VB] LINQでコレクションをチャンク(N個ずつ)に分割 │ Web備忘録