C#で便利な機能といえば「Linq」です。 上手く使えば、コードも読みやすくなり、また複雑処理も実装をすることができます。 このLinqについて、あまり詳しくなかったので、今回勉強をしてみました。
Linq の 基本
- form句から始まる
- 条件式( whereなど)を入れる
- select もしくは group句で終わる
[c] int nums = { 1, 2, 3, 4, 5 }; // n:範囲変数 nums:データソース var lists = from n in nums where n > 3 select n; [/c]
Linqで検索をした クエリ変数(上記ではlists)は、foreachを使って取り出すことができます。 [c] foreach (int i in lists) { Debug.LogError ("i:" + i); } [/c]
クエリ変数はIEnumerable
where
条件式として利用するのがwhere句です。 bool型を返す条件式であれば、どんな式でも使うことができます。 一つの条件式だけではなく、複数の条件式を使うことができます。 [c] int nums = { 1, 2, 3, 4, 5 }; var lists = from n in nums where n > 3 where n < 5 select n;
[/c]
orderby
並べ替えを行う場合には、[oederby]を使うのが便利です。 [c] int nums = { 3, 4, 1, 2, 20, 9 }; var lists = from num in nums orderby num select num; [/c]
orderbyは、昇順と降順が指定できます。 昇順はデフォルトなので、何も指定をしない場合は自動的に昇順になります。 [c] //降順 var lists = from num in nums orderby num descending select num;
[/c]
select
条件式で得られた値を返すのでselect句です。 ただ値を返すのではなく、任意のデータ形式に変換をすることもできます。
group
keyを指定してグループを作成します。 型は、IGroupoing<Tkey,TElement>になり、foreachを使って中身を取り出します。 [c] var hoge = from num in nums where 条件式 group (範囲変数) by (キー) ; [/c]
ラムダ式
これまではクエリ構文と呼ばれる記載をしてきましたが、実際に利用する際にはクエリメソッドと「ラムダ式」を使ったほうが可視性が上がります。
Where
クエリメソッド[Where]を使う場合、下記のような記述になります。 かなりすっきりとしているのではないでしょうか? [c] var lists = num.Where (n => n > 3).Select (n => n); foreach (int i in lists) { Debug.LogError ("中身:" + i); } [/c]
OrderBy
同じような感じで、OrderByも使うことができます。 降順では[OrderByDescending]を利用します。 [c] var lists = nums.OrderBy (n => n).Select (n => n * 2); foreach (int i in lists) { Debug.LogError ("中身:" + i); } [/c]
その他
これ以外にも色々なメソッドが用意されています。 [c] int nums = { 1, 2, 3, 4, 5 }; var max = nums.Max(); // 最大値 var min = nums.Min(); // 最小値 var _sum = nums.Sum(); //足し算
// 指定された条件を満たしていれば、trueを返す var list = nums.Any (n => (n % 2) == 0); [/c]
独習C# 第3版 ハーバート・シルト,エディフィストラーニング株式会社 矢嶋聡 翔泳社 売り上げランキング : 8821 Amazonで詳しく見る |