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