Listは、インデックスを使用してアクセスできる、厳密に型指定されたオブジェクトのリストを表します。
配列のような形で、好きな型を複数格納し、出し入れができます。
このLisTの使い方がイマイチよくわからなかったので、少し勉強をしてみることにしました。
List
Listは、簡単に利用すると以下の様な感じになります。
[c]
using System.Collections.Generic;
//初期化
var list = new List ();
//格納
for (int i = 0; i < 10; i++) {
list.Add (i);
}
//取り出し
foreach (var value in list) {
Debug.LogError ("格納されているint型:" + list[value]);
}
//格納されているint型:0
//格納されているint型:1
.....................
//格納されているint型:9
//消去
list.Clear ();
[/c]
Contains
ある要素が List 内に存在するかどうかを調べてる時に利用するのが、[Contains]です。
これは、List型の要素を検索し、条件にあっているかどうかbool型で返却をします。
[c]
var data = new List();
data.Add("nishikawa");
data.Add("tanaka");
data.Add("kudou");
data.Add("inoue");
if (data.Contains ("kudou")) {
Debug.LogError ("true");
}
[/c]
Where
List内から、検索条件を指定して要素を取り出します。
[c]
var list = Enumerable.Range(0, 10).ToList();
// 5以上の数字を格納したListを返します
var hoges = list.Where (x => x > 5).ToList ():
[/c]
Select
Listの要素を操作できる。
[c]
// 要素同士を掛けあわして、Listで返している
var list = Enumerable.Range(0, 10).Select(x => x * x).ToList();
[/c]
SelectMany
先ほどのSelectと似ているが、少し使い方が違う。
イメージとしては、元のListとは違うListを作る感じで、foreachが連続して使っている場所がすっきりとします。
[c]
// Listの中にあるListを返す処理
var manyHoge = new List<List> ();
manyHoge.Add (listChild);
manyHoge.Add (listChild2);
var mamaHoge = manyHoge.SelectMany(names => names).ToList();
[/c]
詳しくはこちらを参考に。
九九だけじゃない!アプリ開発にもゲーム開発にも使える、SelectMany! - Qiita
ForEach
foreachを簡単に使えます。
[c]
list3.ForEach (x => {
Debug.LogError("list3の要素:" + x);
});
[/c]
Exists
Listの中に条件にあったものがあるかをbool型で返します。
[c]
// 10以上の数字があるかどうか
bool listBool = list.Exists (x => x > 10);
[/c]
Find
先ほどのExistsと似ているのですが、こちらは条件にあった最初の要素を返します。
[c]
// 要素に4があれば
var num = list.Find (x => x.Equals (4));
[/c]
RemoveAll
条件にあった要素を削除します。
[c]
// 4以上の要素を削除します。
list.RemoveAll (x => x > 4);
[/c]
最後に
これはList型だけではないのですが、foreachを使う場面で、上記のように色々メソッド(拡張メソッド)があるので、できればコードを短くかつ読みやすく書いていきたいですね。
おそらく、今回挙げたメソッド以外にも便利なものがあるはず。
【参考】
インデックスを使用してアクセスできる、厳密に型指定されたオブジェクトのリストを表します。