【C#】Linq メソッドの使い方

C#Linqについて、個別のメソッドについて勉強をしてみました。 実際に使えるレベルにまで、もっていかないとせっかくある便利な機能がもったいないので、使いこなせるようにしたい。

Where

条件を設定できる。 [c] // foreach文に記載 foreach (var i in nums.Where(c => c >= 2)) { Debug.LogError ("i:" + i); } [/c]

Select

値を加工する。 [c] foreach (var j in nums.Select(c => c * 2)) { Debug.LogError ("j:" + j); } [/c]

SelectMany

2つのICollection(List,Dictionaryなど)を総当りに計算をする。 [c] int nums = {1, 2, 20, 9 }; int nums2 = { 3, 4};

// x = nums , y = nums2 var hoge = nums.SelectMany *1; foreach (var i in hoge) { Debug.LogError (i); } //1 * 3 = 3 //1 * 4 = 4 //2 * 3 = 6 //2 * 4 = 8 //20 * 3 = 60 //20 * 4 = 80 //9 * 3 = 27 //9 * 4 = 36

[/c]

ToArray()

配列を生成する。 [c] int a = { 30, 2, 12 }; a = a.Select (x => x + 1).ToArray(); foreach (var i in hoge) { Debug.LogError (i); } [/c]

ただし、上記の場合は、配列に格納しなおさなくても、IEnumerable型のままでも同じような処理ができる。 こちらの方法のほうが、若干であるが処理速度が早い。

ToList()

Listを生成する。 要素数が変化する場合には、配列よりもListを使ったほうが扱いやすい。 [c] int a = { 30, 2, 12 }; var list = a.ToList (); list.Add (99); foreach (var i in list) { Debug.LogError (i); }

[/c]

Count

これは何個の要素があるかを調べることができます。 実は、上記のToArray(),ToList()もそうなのですが、インスタンス化をしています。 ですので、使う用途によっては、Lengthプロパティ(配列)を使ったほうが良い場合がある。 [c] int nums = list.Count (); int nums = list.ToArray ().Length; [/c]

First

条件式に満たした最初の値を取り出す。 [c] int a = { 30, 2, 12 }; var firstNum = b.First (x => x > 2); [/c]

この場合、万が一条件式を満たした値がない場合にNullが返ってきます。 これを防ぐためには FirstOrDefault()を使います。 [c] // デフォルトの0が返ってくる var firstNum = b.FirstOrDefault (x => x > 45); [/c]

Last

最後の値をとるLast()も同じように、条件式を満たした値を返すのだが、こちらは全ての値を判定するのでパフォーマンス的にあまり良くないです。 その場合は、一度ソートをかけ、First()で取得するのが良い。

OrderBy

並び替えを行う。 速度は配列のSort()より遅いので正しく使う必要がある。 元のデータを加工せずに利用したい場合に使う。 [c] // 元データをソートしている Array.Sort (a); foreach (var item in a) { Debug.LogError (item); }

// 元データを加工しない foreach (var item in a.OrderBy(n => n)) { Debug.LogError (item); } [/c]

Any

条件に一致している場合にtrueを返す。 何も要素がない場合でもfalseを返してくれる。 [c] var b = new int{};

// Anyはfalseを、Allはtrueを返すので注意 Debug.LogError (b.Any (x => x == 2)); // false Debug.LogError (b.All (x => x == 2)); // true [/c]

独習C# 第3版独習C# 第3版
ハーバート・シルト,エディフィストラーニング株式会社 矢嶋聡

翔泳社
売り上げランキング : 16503

Amazonで詳しく見る

*1:x) => nums2, (x, y) => x + " x " + y + " = " + (x * y