C# LINQについて
皆さんこんにちは
watanukiです。
今回はLINQについて記載していきます。
ラムダ式とは違い困惑したわけではないのですが
種類が多いので何ができるのかを書き留めれたらと思ってます。
【LINQについて】
LINQはListや配列などのコレクションをの要素を処理するメソッドが入った
ライブラリのことで使用するにはSystem.Linqの追加が必要
【メリット】
・同じような機能を持つFor文と比べて記載量が圧倒的に少ない
・コードが簡潔で読みやすい
【デメリット】
・iOSで不具合が起こる可能性がある
※参考資料
私自身はMacを持っていないのでしばらくの間、AndroidまたはWindowsで
制作していく予定です。そのため今のところデメリットは痛くありませんが
iOSで使う場合は注意がいりそうですね。
↓この記事の方がiOSで使用可能なライブラリを作成しているみたいなので
そのうちこの問題は解消されるかもしれませんね
【よく使うLINQ】
自分で書こうかとも考えましたが
色んな方がすでに書いているので割愛します。
ひとまず使用例まで書いてあってわかりやすかった
記事のリンクを貼っておきます
よく使うのは
Count
Select
All
Any
Where
辺りなのかなと思っていますが
他のものも余裕があれば使っていこうと思います。
【最後に】
今、サンプルゲームを魔改造したゲームを制作中なのですが
その中で3回ダメージを受けたらゲームオーバーにする機能を追加予定なので
完成し次第追記でどうLinqを使ったかを書こうと思います
【追記】
当初の予定とは違いますが、LinQ使ってみました。
罠を配列に入れて並び替えるコードです。
OrderBy使ってます。
{
public Transform playerTransform;
// Start is called before the first frame update
void Start()
{
trapPrefab = new GameObject { trapBigPrefab, trapSmallPrefab, trapSmall1Prefab, trapSmall2Prefab, trapSmall3Prefab };
Invoke("UpdateTrap", 1f);
}
void Update()
{
}
void UpdateTrap()
{
GameObject nextTrap = Generate();
Invoke("UpdateTrap", 1f);
}
GameObject Generate()
{
var array = trapPrefab.OrderBy(i => Guid.NewGuid()).ToArray();
Vector3 generateTrapPosition =
new Vector3(playerTransform.position.x + 500, array[0].transform.position.y,array[0].transform.position.z);
GameObject nextTrap = Instantiate(array[0], generateTrapPosition,Quaternion.identity);
return nextTrap;
}