はなちるのマイノート

Unityをメインとした技術ブログ。自分らしくまったりやっていきたいと思いますー!

【Unity】List<T>クラスの持つデリゲートを使うメソッド達

この記事でのバージョン
Unity2018.3.9f1

はじめに

今回はあまり使う機会が少ない?ようなList<T>クラスが持つデリゲートを引数にするメソッドに関する記事です!

これらはリストの各要素に対していろいろな処理ができるようなメソッドがほとんどになっています。

ラムダ式

最初にデリゲート(匿名メソッド)を引数にすると書きましたが、宣言やメソッドの用意が大変なのでラムダ式を使っていきます。
ラムダ式ってなんだっけ?という方は少し調べてみてから続きを見てみてください!

qiita.com

ForEachメソッド

using System.Collections.Generic;
using UnityEngine;

public class Hoge : MonoBehaviour
{

    void Start()
    {
        var list = new List<int> { 1, 2, 3, 4, 5 };

        list.ForEach(s => Debug.Log(s * s));    //1, 4, 9, 16, 25
    }
}

ForEachメソッドはリストの各要素に対してAction<T>デリゲートで指定した処理を実行します。

Existsメソッド

using System.Collections.Generic;
using UnityEngine;

public class Hoge : MonoBehaviour
{

    void Start()
    {
        var list = new List<int> { 1, 2, 3, 4, 5 };

        bool exists = list.Exists(s => s == 4);     //true
        Debug.Log(exists);
        exists = list.Exists(s => s == 6);          //false
        Debug.Log(exists);
    }

}

ExistsメソッドはPredicate<T>デリゲート(匿名メソッド)で指定した条件に一致する要素が存在するかどうかを調べてtrue/falseのどちらかを返します

Findメソッド

using System.Collections.Generic;
using UnityEngine;

public class Hoge : MonoBehaviour
{

    void Start()
    {
        var list = new List<string> { "はねる", "ころがる", "つむ", "なつ", "ふろー", "すぺーす", "あてる", "ぎりぎり", "あつい", "じゅう", "つながる" };

        string name = list.Find(s => s[0] == 'あ');
        Debug.Log(name);        //あてる
    }

}

FindメソッドはPredicate<T>デリゲート(匿名メソッド)で指定した条件に一致する要素を検索し、最初に見つかった要素を返します

FindIndexメソッド

using System.Collections.Generic;
using UnityEngine;

public class Hoge : MonoBehaviour
{

    void Start()
    {
        var list = new List<string> { "はねる", "ころがる", "つむ", "なつ", "ふろー", "すぺーす", "あてる", "ぎりぎり", "あつい", "じゅう", "つながる" };

        int index = list.FindIndex(s => s[0] == 'あ');
        Debug.Log(index);        //6
    }

}

FindIndexメソッドはPredicate<T>デリゲート(匿名メソッド)で指定した条件に一致する要素を検索し、最初に見つかった要素のインデックス(添字)を返します

FindAllメソッド

using System.Collections.Generic;
using UnityEngine;

public class Hoge : MonoBehaviour
{

    void Start()
    {
        var list = new List<string> { "はねる", "ころがる", "つむ", "なつ", "ふろー", "すぺーす", "あてる", "ぎりぎり", "あつい", "じゅう", "つながる" };

        var names = list.FindAll(s => s[0] == 'あ');
        foreach(string s in names) Debug.Log(s);        //あてる あつい
    }

}

FindAllメソッドはPredicate<T>デリゲート(匿名メソッド)で指定した条件に一致する要素を検索し、見つかった要素を全て返します

RemoveAllメソッド

using System.Collections.Generic;
using UnityEngine;

public class Hoge : MonoBehaviour
{

    void Start()
    {
        var list = new List<string> { "はねる", "ころがる", "つむ", "なつ", "ふろー", "すぺーす", "あてる", "ぎりぎり", "あつい", "じゅう", "つながる" };

        int removedCount = list.RemoveAll(s => s.Length >= 3);
        Debug.Log(removedCount);                    //9
        foreach (string s in list) Debug.Log(s);     //つむ なつ
    }

}

RemoveAllメソッドはPredicate<T>デリゲート(匿名メソッド)で指定した条件に一致する要素を削除し、削除した要素数を返します

さいごに

今回はいくつかメソッドを紹介してみました。
けっこうラムダ式の練習などに良いメソッドだったような感じがします!