カタバミさんのプログラミングノート

日曜プログラマーがプログラミング関係のメモを記録するブログです。

C# LINQ to Objectsのインデックス付きメソッド

C# LINQのコレクション、ファイル、文字列などに関するインデックス付きメソッドの覚え書きです。

System.LINQ.Enumerable Classで、2番目以降の引数にFunc<TSource,Int32,...>が含まれるものはインデックス付き形式に対応しています。具体的には以下のメソッドが挙げられます。何れも拡張メソッドなので1番目の引数は呼び出したインスタンスが与えられます。

名前 概要
Select 変換
SelectMany 多次元配列の変換
SkipWhile 条件が成立する要素までスキップ
TakeWhile 条件が成立した要素からスキップ
Where 条件が成立する要素のみ抽出

SelectMany以外のサンプルコード

var x = new[]{0,1,2,3,4,5};

Console.WriteLine(string.Join(", ", x));
// 出力:0, 1, 2, 3, 4, 5

Console.WriteLine(string.Join(", ",
    x.Select((n, i) => (i, n))));
// 出力:(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5)

Console.WriteLine(string.Join(", ",
    x.SkipWhile((n, i) => i < 3)));
// 出力:3, 4, 5

Console.WriteLine(string.Join(", ",
    x.TakeWhile((n, i) => i < 3)));
// 出力:0, 1, 2

Console.WriteLine(string.Join(", ",
    x.Where((n, i) => i%2==0)));
// 出力:0, 2, 4