この記事でのバージョン
Unity2018.3.9f1
はじめに
今回はあまり使う機会が少ない?ようなList<T>クラスが持つデリゲートを引数にするメソッドに関する記事です!
これらはリストの各要素に対していろいろな処理ができるようなメソッドがほとんどになっています。
ラムダ式
最初にデリゲート(匿名メソッド)を引数にすると書きましたが、宣言やメソッドの用意が大変なのでラムダ式を使っていきます。
ラムダ式ってなんだっけ?という方は少し調べてみてから続きを見てみてください!
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>デリゲート(匿名メソッド)で指定した条件に一致する要素を削除し、削除した要素数を返します。
さいごに
今回はいくつかメソッドを紹介してみました。
けっこうラムダ式の練習などに良いメソッドだったような感じがします!