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

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

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

いつもひよこのたまごをご利用下さいましてありがとうございます!
おかげ様でチュートリアル数も10ゲーム目となりました!
チュートリアル一覧は
こちら からどうぞ!


スポンサーリンク

今回は、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にはめちゃくちゃ便利なメソッドがまだまだたくさんあります!
なので、またそのうち続きを書くと思います!
とりあえず、今回はここまでです〜