List

Listを初期化する。

GameObject型のリスト

1
List<GameObject> list = new List<GameObject>();

int型のリスト

1
List<int> list = new List<int>();

int型の多次元配列

1
List<List<int>> results = new List<List<int>>();

Listに要素を追加する

*に初期化の際に宣言した型の要素を入れる

1
list.Add(*);

別の型の配列をListに変換する

1
2
3
List<int> list = new List<int>();
int[] numbers = Enumerable.Range (0, 10).ToArray ();
list.AddRange(numbers);

Listの要素を取得する

i番目の要素を取り出す

1
list[i];

Listの要素を削除する

i番目の要素を削除する

1
list.RemoveAt(i);

Listの要素を全て削除する

1
list.Clear();

Listの要素の数を取得する

LengthではなくCountなので注意

1
int count = list.Count;

配列に変換する

1
list.ToArray();

List内の要素の有無を確認

1
2
3
if ( data.Contains(*) ) {
  // trueの場合
}

連番のListを作成する

System.Linqを読み込むと配列をList型に変換するToList()が使えるようになる。

1
2
using System.Linq;
List<int> list = Enumerable.Range(0, 100).ToList();

for文の書き方

for文

1
2
3
4
for (int i = 0; i < list.Count; i++)
{  
  print(list[i]);
}

foreach文

1
2
3
4
foreach (int i in list)
{
  print(i);
}

ForEach文

1
2
3
4
list.ForEach(i =>
{
  print(i);
});

Whereで条件にあった要素を抜き出す

System.Linqを読み込むとWhereで条件にあった要素の抽出ができるようになる。

1
List<int> output = list.Where(x => x % 2 == 0).ToList();//0,2,4,6,8...

こんな感じで上書きするのも可

1
list = list.Where(x => x % 2 == 0).ToList();//0,2,4,6,8...

Existsで条件にあった要素があるかどうかを調べる

1
2
//要素に10が存在するかどうか
bool hasInts = list.Exists(i => i.Equals(10));

Findで条件にあった最初の要素を取得する

1
int output = list.Find(i => i > 10);

FindAllで条件にあった要素を全て取得する

1
List<int> output = list.FindAll(i => i > 10).ToList();

RemoveAllで条件にあった要素を全て削除する

1
2
int output = list.RemoveAll(i => i > 10);
print(output);//削除した要素の数が返ってくる

Selectで要素に一律に処理を行う

1
List<int> output = list.Select(x => x * 2).ToList(); //2,4,6,8,10...

SelectManyで入れ子になっているリスト要素を平坦化する

1
2
3
4
5
6
7
8
9
//入れ子構造のリスト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の中身をシャッフルする

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
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の中身をランダムに取得

1
2
3
4
5
6
7
public static class ListExtension
{
  public static List<T> GetRandom<T>(this List<T> self)
  {
    return self[UnityEngine.Random.Range(0, self.Count)];
  }
}

nullの要素を削除する

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
public static class ListExtension
{
    /// <summary>
    /// nullの要素を削除
    /// </summary>
    public static List<T> Compact<T>(this List<T> self)
    {
        return self.Where(i => i != null).ToList();
    }
}