Skip to content

今すぐUnityでLinQを使えるようになるための、日本一雑な解説

Posted in 技術記事

「(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とは何かの説明全然してない)ですが、技術は使ってナンボだと思うのでこういうスタンスです。上級者の方につきましては、こんな落とし穴あるよーというのがあれば教えていただけると幸いです。

Be First to Comment

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です