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

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

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

Where

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

Select

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


SelectMany

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

// x = nums , y = nums2
var hoge = nums.SelectMany ((x) => nums2, (x, y) => x + " x " + y + " = " + (x * y));
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


ToArray()

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

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

ToList()

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


Count

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

First

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

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

Last

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

OrderBy

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

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

Any

条件に一致している場合にtrueを返す。
何も要素がない場合でもfalseを返してくれる。
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# 第3版独習C# 第3版
ハーバート・シルト,エディフィストラーニング株式会社 矢嶋聡

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

Amazonで詳しく見る

Related Posts Plugin for WordPress, Blogger...