Listを初期化する
GameObject 型のリスト
List<GameObject> list = new List<GameObject>();
int 型のリスト
List<int> list = new List<int>();
int 型の多次元リスト
List<List<int>> results = new List<List<int>>();
Listに要素を追加する
* に初期化の際に宣言した型の要素を入れる
list.Add(*);
別の型の配列をListに変換する
List<int> list = new List<int>();
int[] numbers = Enumerable.Range(0, 10).ToArray();
list.AddRange(numbers);
Listの要素を取得する
i 番目の要素を取り出す
list[i];
Listの要素を削除する
i 番目の要素を削除する
list.RemoveAt(i);
Listの要素を全て削除する
list.Clear();
Listの要素の数を取得する
Length ではなく Count なので注意
int count = list.Count;
配列に変換する
list.ToArray();
List内の要素の有無を確認
if (data.Contains(*)) {
// true の場合
}
連番のListを作成する
System.Linq を読み込むと配列を List 型に変換する ToList() が使えるようになります。
using System.Linq;
List<int> list = Enumerable.Range(0, 100).ToList();
for文の書き方
for 文
for (int i = 0; i < list.Count; i++)
{
print(list[i]);
}
foreach 文
foreach (int i in list)
{
print(i);
}
ForEach 文
list.ForEach(i =>
{
print(i);
});
Whereで条件にあった要素を抜き出す
System.Linq を読み込むと Where で条件に合った要素の抽出ができるようになります。
List<int> output = list.Where(x => x % 2 == 0).ToList();//0,2,4,6,8...
こんな感じで上書きするのも可
list = list.Where(x => x % 2 == 0).ToList();//0,2,4,6,8...
Existsで条件にあった要素があるかどうかを調べる
// 要素に 10 が存在するかどうか
bool hasInts = list.Exists(i => i.Equals(10));
Findで条件にあった最初の要素を取得する
int output = list.Find(i => i > 10);
FindAllで条件にあった要素を全て取得する
List<int> output = list.FindAll(i => i > 10).ToList();
RemoveAllで条件にあった要素を全て削除する
int output = list.RemoveAll(i => i > 10);
print(output);//削除した要素の数が返ってくる
Selectで要素に一律に処理を行う
List<int> output = list.Select(x => x * 2).ToList(); //2,4,6,8,10...
SelectManyで入れ子になっているリスト要素を平坦化する
// 入れ子構造のリスト A + B を作成する
List<int> listA = Enumerable.Range(0, 100).ToList();
List<int> listB = Enumerable.Range(1000, 1100).ToList();
List<List<int>> listWrapper = new List<List<int>>();
listWrapper.Add(listA);
listWrapper.Add(listB);
// 1つのリストにする
List<int> output = listWrapper.SelectMany(i => i).ToList();
Listの中身をシャッフルする
public static class ListExtension
{
/// <summary>
/// ランダムに並び替え
/// </summary>
public static List<T> Shuffle<T>(this List<T> self)
{
for (int i = 0; i < self.Count; i++)
{
T temp = self[i];
int randomIndex = Random.Range(0, self.Count);
self[i] = self[randomIndex];
self[randomIndex] = temp;
}
return self;
}
}
Listの中身をランダムに取得
public static class ListExtension
{
public static T GetRandom<T>(this List<T> self)
{
return self[UnityEngine.Random.Range(0, self.Count)];
}
}
nullの要素を削除する
public static class ListExtension
{
/// <summary>
/// nullの要素を削除
/// </summary>
public static List<T> Compact<T>(this List<T> self)
{
return self.Where(i => i != null).ToList();
}
}