List

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 List<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();
    }
}