今回のテーマ
- 匿名関数
- ラムダ式
- Linq
準備
CSharp1-3-2.zip をダウンロードして展開し、.sln ファイルを Visual Studio で開き、実行してみましょう。
LINQ とは
配列 (array) やリスト (list) に対してメソッドを追加し、そのメソッドによりデータを操作することができる。
今回の例ではデータ操作として「抽出」(配列から指定した条件を満たす要素のみを抽出する)と「並べ替え」(計算結果の値の昇順・降順に並べ替える)を行っている。
それ以外にどのような操作ができるかは参考資料を参照すること。
また、抽出時の条件指定や並べ替えをする時の「どのような順番に並べ替えるか」を指定するためにデリゲートを使ってメソッドを渡している。この記述に「ラムダ式」を使うとプログラムがとても短くなる。
参考資料
- 独習 C# 第10章 ラムダ式/LINQ
- [完全版]究極のC#プログラミング ――新スタイルによる実践的コーディング
- delegate の仕組みは C# のバージョン 1.0 からあった。ジェネリック、匿名メソッド、System.Action, System.Func はバージョン 2 で、ラムダ式と LINQ は C# のバージョン 3 で追加された。基本的な C# の使い方はわかった上で LINQ 等の新機能を学びたい場合はこの本が都合がよい。
- Web 版として 究極のC#プログラミング と、その元となった C# 3.0 入門 がある
課題
ソリューションを "2 Lambda Expression Exercise" プロジェクトに切り替え、Program.cs を開き、以下の課題に解答せよ。
課題1
以下のように変数 stringArray が宣言されている。
string[] stringArray = { "banana", "orange", "kiwi", "apple", "pineapple" };
Linq を使って、stringArray から「文字列の長さが 5 文字より長い要素」を抽出し、出力せよ
課題2
以下のように変数 intArray が宣言されている。
int[] intArray = { 9, 3, 5, 8, 1, 7, 2, 4, 6, 0 };
Linq を使って、intArray から偶数を抽出し、出力せよ
Unity での使用例
LearnLambdaAndLinq.unitypackage をダウンロードして Unity プロジェクトにインポートし、"Linq" シーンを開いて実行する。
照準の動きを制御する Crosshair スクリプト コンポーネントと、爆弾を見えなくする BombManager スクリプト コンポーネントに Linq・匿名関数・ラムダ式の使用例がある。