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.Select( 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 );