C#のLinqについてまとめた。

Linqについて

C#にはC++にはないLinqという素晴らしい仕組みがあるらしい。脳に刻みこむためにメモした。

以下のスライドを参照してまとめただけ。
http://www.slideshare.net/shotababa359/c-linq-to-objects

利用方法

using System.Linq を書くだけ。

!!Linqにある拡張メソッド一覧

名前 説明
Count 数を返す var v = characters.Count( c=> c.Nenshu >= 10000000 );
Where 要素抽出 var v = characters.Where( c=> c.Nenshu >= 10000000 );
Select 要素射影(年収だけのリスト) var v = characters.Where( c=> c.Nenshu );
All 全ての要素満たしてる? var v = characters.All( c=> c.Nenshu >= 10000000 );
Any いずれかが要素満たしてる? var v = characters.Any( c=> c.Nenshu == 10000000 );
First 条件を満たす最初の要素(ないと例外発生) var v = characters.First( c=> c.Nenshu >= 10000000 );
FirstOrDefault 条件を満たす最初の要素。ない場合は規定値※1 var v = characters.FirstOrDefault( c=> c.Nenshu >= 10000000 );
Last 条件を満たす最後の要素(ないと例外発生) var v = characters.Last( c=> c.Nenshu == 10000000 );
LastOrDefault 条件を満たす最後の要素。ない場合は規定値※1 var v = characters.LastOrDefault( c=> c.Nenshu == 10000000 );
Max 最大値を取得する var v = characters.Max( c=> c.Nenshu );
Min 最小値を取得する var v = characters.Min( c=> c.Nenshu );
Sum 合計値を取得する var v = characters.Sum( c=> c.Nenshu );
Average 平均値を取得する var v = characters.Average( c=> c.Nenshu );
OfType 指定された型に一致する要素を抽出 var v = characters.OfType();
Take 指定された数の要素を取得 var v = characters.Take(10);
Skip 指定された数の要素を読み飛ばす var v = characters.Skip(10);
OrderBy 昇順にソート var v = characters.OrderBy( c => c.Nenshu );
OrderByDescending 降順にソート var v = characters.OrderByDescending( c => c.Nenshu );
Reverse 逆順にする var v = characters.Reverse();
Distinct 重複を取り除く var v = characters.Distinct();
  • ※1 規定値はクラス型ならnullになります。

応用

最大値を持つ要素を取得

//一番金持ちのキャラを取得
var max = characters.Max( c=> c.Nenshu );
var richman = characters.Where( c=> c.Nenshu == max );

(※初投稿時WhereのところMaxになってました。ごめんなさい。)

指定した値で初期化された配列を取得

//trueで初期化されたbool値を100個取得
bool[] flags = Enumerable.Repeat(true,100).ToArray();
//"無駄"で初期化された文字列を1000個取得
string[] strs = Enumerable.Repeat("無駄", 1000));

N個スキップした先からM個取得

//1pageあたり10個ずつ表示するシステムで、P pageに表示する10個を取得
var v = characters.Skip( P * 10 ).Take( 10 );