Unity(C#)初心者・入門者向けチュートリアル ひよこのたまご

AndroidやiOS向けアプリを簡単に作れるゲーム開発環境Unity(ユニティ)の使い方を、チュートリアル方式で一緒に学びましょう!

【C#】LINQ ForEach, Select, Where解説【LINQ】

今回は、C#をやっていたらぜひとも使いたいLINQについてです!

ForEach, Select, Where解説

LINQとは、Language INtegrated Queryの略で、統合言語クエリーを意味します!
配列やListはもちろん、データベースやxmlデータなど様々なデータを統合的に処理するメソッド群です!

この記事では分かりやすい標準クエリー演算子(普通のメソッドの形)と、ラムダ式を用いてLINQを解説していきます!

ForEach

ForEachは、データを順番に実行していきます!
とりあえずソースです!

using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;

public class LinqTest : MonoBehaviour {

	void Start () {
		var list = Enumerable.Range(0, 10).ToList();
		list.ForEach(n => Debug.Log("Range:"+n));

//		foreach(var n in list) {
//			Debug.Log("Range2:" + n);
//		}
	}
}

LinqTest.cs

Enumerable.Rangeメソッドは、IEnumerable型のコレクションを作成します!
IEnumerableと聞くとなんだか難しそうですが、通常の配列(int[]など)やListが実装しているモノと考えると、身近に感じられるのではないでしょうか?
第一引数が「最初の数値」、第二引数が「要素数」を表します!今回は0から10個なので、0〜9のlistコレクションを作成しました!

さて、そのlistコレクションにForEachメソッドが付いています!
コレ、LINQです!
そのあとに続く引数内の記述は、ラムダ式と呼ばれる記述方法です!
listコレクションの要素を順番に"n"として取り出し、"=>"の右側で利用します!
内容としては、コメントアウトしてあるforeach文と全く同じです!

Select

続いてSelectです!
Selectを使うと、コレクションの内容に変化を加え、その戻り値を新たなコレクションとして扱うことができます!
以下ソースです!

using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;

public class LinqTest : MonoBehaviour {

	void Start () {
		var list = Enumerable.Range(0, 10);

		var selectList = list.Select(n => n * 2).ToList();
		selectList.ForEach(n => Debug.Log("Select:"+n));

//		foreach(var n in list) {
//			Debug.Log("Select2:" + n * 2);
//		}
	}
}

LinqTest.cs

先ほどと同様、Enumerable.Rangeで0〜9のlistコレクションを作成しています!

続いてLINQのSelectメソッドです!
"n"にはlistコレクションの要素が入っていきます!
次に"=>"の右側でnを2倍にし、戻り値としてselectListへ返します!

最後のToListメソッドは、selectList変数の型をIEnumerableからListに変換しています!
List型じゃないとForEachメソッドを使えないからです!

Where

最後はWhereです!
Whereはコレクションにフィルターをかけ絞り込みます!
foreach文の中でif文を使っているようなものですね!以下ソースです!

using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;

public class LinqTest : MonoBehaviour {

	void Start () {
		var list = Enumerable.Range(0, 10).ToList();

		var whereList = list.Where(n => n % 2 == 0).ToList();
		whereList.ForEach(n => Debug.Log("Where:"+n));

//		foreach(var n in list) {
//			if(n % 2 == 0) {
//				Debug.Log("Where2:"+n);
//			}
//		}
	}
}

LinqTest.cs

基本はSelectと同じですが、ラムダ式の中で偶数のTrue or Falseチェックを行っています!
この場合、偶数の値だけが戻り値として、whereList変数に格納されます!


今回は本当に入門の入門でしたが、LINQにはめちゃくちゃ便利なメソッドがまだまだたくさんあります!
なので、またそのうち続きを書くと思います!
とりあえず、今回はここまでです〜