[Unity] List から欲しいものだけ取り出す


前回の関数をスマートにしてみましょう。

UnityよりC#のことですね。

前回のコードはこちら

        static Marking[] GetList(GameObject target, string searchMessage)
        {
            var resultList = new List<Marking>();
            var tempList = target.GetComponentsInChildren<Marking>(true);
            foreach (var tempMarking in tempList)
            {
                if (tempMarking.Message == searchMessage)
                    resultList.Add(tempMarking);
            }
            return resultList.ToArray();
        }




ListにはFindAllというのがあるので、これを使ってシンプルにしてみましょう。

        static Marking[] GetList(GameObject target, string searchMessage)
        {
            var tempList = target.GetComponentsInChildren<Marking>(true);
            return tempList.ToList().FindAll(item => item.Message == searchMessage).ToArray();
        }
こんな感じです。
FindAllの()の中に、欲しいものを指定するだけです。
ここでは、Marking.MessageとsearchMessageが同じ値のものだけを取得していきます。
itemは、好きな名称に書き換えてもオッケーですよ。Listの中の<T>の要素になります。ここでは、Markingの要素になります。
()中の=>から後ろが条件を記述するところで、trueになっていたらその要素が追加されたList<T>が返されることになります。

0 件のコメント :

コメントを投稿