「(for文やforeach文が)最近太ったなぁ…(スクリプトの)ダイエット始めないとなぁ…」
実行環境
Windows7 Professional 64bit
Unity2017.2.0f3
どういう人向け?
「LinQって何?」「For文書くのめんどくなってきた」という方
LinQって何?
配列やリストをコネコネする時にとても便利なやつで、for文やforeach文の代わりに使う事が多い。呼び方は「リンク」
どうやって使うの?
使いたいスクリプトの先頭で
using System.Linq;
とするだけで準備完了
比較してみる
0から10が順に入ったリストを用意して…
//Foreach使用例
List<int> ForeachSample = new List { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
List<int> ResultList = new List(); //結果格納用も用意
//LinQ使用例
List<int> LinqSample = Enumerable.Range(0, 10) //0から10が順に入ったリストを用意
.ToList(); //をリストとして保存
偶数だけに限定しよう
//Foreach使用例
List<int> ForeachSample = new List { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
List<int> ResultList = new List();
foreach (int number in ForeachSample) {
if (number % 2 == 0) ResultList.Add(number); //偶数のみ結果のリストに追加
}
//LinQ使用例
List<int> LinqSample = Enumerable.Range(0, 10)
.Where(x => x % 2 == 0) //偶数のみにする
.ToList();
先頭から3つ取ろう
//Foreach使用例
List<int> ForeachSample = new List { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
List<int> ResultList = new List();
foreach (int number in ForeachSample) {
if (number % 2 == 0) ResultList.Add(number);
if (ResultList.Count == 3) break; //結果のリストが3つになったら抜ける
}
//LinQ使用例
List<int> LinqSample = Enumerable.Range(0, 10)
.Where(x => x % 2 == 0)
.Take(3) //先頭から3つ取得
.ToList();
ランダム取得にしたくない?
//Foreach使用例
List<int> ForeachSample = new List { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
List<int> ResultList = new List();
foreach (int number in ForeachSample) {
if (number % 2 == 0) ResultList.Add(number);
if (ResultList.Count == 3) break;
//をランダムで並び替え…?
}
//LinQ使用例
List<int> LinqSample = Enumerable.Range(0, 10)
.Where(x => x % 2 == 0)
.OrderBy(x => System.Guid.NewGuid()) //ランダムで並び替え
.Take(3)
.ToList();
やっぱ配列のほうがいいな
//Foreach使用例
( ´∀`)
//LinQ使用例
int[] LinqSample = Enumerable.Range(0, 10) //List<int>をint[]に変更
.Where(x => x % 2 == 0)
.OrderBy(x => System.Guid.NewGuid())
.Take(3)
.ToArray(); //配列として保存
注意点は?
便利な分、多少重い…らしい。個人的には、ガンガン使って処理が固まったあとプロファイラーみてボトルネックになってそうなら書き直す、という方向がいいと思います。ゲームが完成することが最優先です。
もっと詳しい情報は?
https://qiita.com/Marimoiro/items/0e119b47d65bf138789a
おまけ
本職プログラマーさんには怒られそうなくらい雑(というかLinQとは何かの説明全然してない)ですが、技術は使ってナンボだと思うのでこういうスタンスです。上級者の方につきましては、こんな落とし穴あるよーというのがあれば教えていただけると幸いです。