配列とリストの基本操作(Unity)をまとめて行きます。

#配列とリストの基本操作(Unity)をまとめて行きます。

##配列編
###①宣言の仕方

```C#
        //長さが5の空の配列を宣言
        int[] numbers = new int[5];

        //長さが5の3,5,4,2,1を含む配列を宣言
        int[] numbers = new int[] { 3, 5, 4, 2, 1 };

        //これはダメ、バグになる
        int[] numbers = new int[5] { 3, 5};
```

###②配列の長さを確認する方法

```C#
        //長さが5の空の配列を宣言
        int[] numbers = new int[5];
        Debug.Log(numbers.Length);//結果は5
```

###③配列の要素を取り出す

```C#
        //長さが5の空の配列を宣言
        int[] numbers = new int[5];
        int number = numbers[3];
        Debug.Log(number);//結果はintのデフォ値0、参照型だと結果はnull
```

###④配列の要素を書き込み

```C#
        //長さが5の空の配列を宣言
        int[] numbers = new int[5];
        numbers[3] = 4;
        Debug.Log(numbers[3]);//結果は4
```

###⑤配列をリサイズ

```C#
        //長さが5の配列を宣言
        int[] numbers = new int[] { 3, 5, 4, 2, 1 };

        //長さ5の配列を長さ3にリサイズ、後ろの入りきれない要素の2と1はなくなる
        System.Array.Resize(ref numbers, 3);//{3, 5, 4}

        //長さ3の配列を長さ5にリサイズ、後ろに空の要素を二つ追加する、intだと0が追加される
        System.Array.Resize(ref numbers, 5);//{ 3, 5, 4, 0, 0 };
```

###⑥配列の並べ替え

```C#
        //長さが5の配列を宣言
        int[] numbers = new int[] { 3, 5, 4, 2, 1 };

        //並べ替え、結果は{ 1, 2, 3, 4, 5 },floatの配列にも使える
        System.Array.Sort(numbers);
```

###⑦配列から同じ要素を保持するリストを作る

```C#
        //長さが5の配列を宣言
        int[] numbers = new int[] { 3, 5, 4, 2, 1 };
        List<int> numList = new List<int>();
        numList.AddRange(numbers);
```

##リスト編
###①宣言の仕方

```C#
        //空のリストを宣言
        List<int> numbers = new List<int>();

        //空のリストだが、5要素分のメモリーを確保したリストを宣言
        List<int> numbers = new List<int>(5);

        //長さが5の3,5,4,2,1を含むリストを宣言
        List<int> numbers = new List<int> { 3, 5, 4, 2, 1 };
 ```  

###②リストの要素数とキャパシティーの確認の仕方
リストの要素数はCount(読み取り専用)、
確保したメモリー数はCapacity、こっちは書き込み可能だが、Countより小さい数字を指定するとバグる

```C#
        //空のリストだが、5要素分のメモリーを確保したリストを宣言
        List<int> numbers = new List<int>(5);
        Debug.Log(numbers.Count);//結果は0
        Debug.Log(numbers.Capacity);//結果は5
 ``` 
```C#
        //長さが5の3,5,4,2,1を含むリストを宣言
        List<int> numbers = new List<int> { 3, 5, 4, 2, 1 };
        Debug.Log(numbers.Count);//結果は5
        numbers.Capacity = 3;//5より小さいため、これはバグる
 ``` 

###③リストの要素を取り出す、書き込み、配列と一緒

```C#
        //長さが5の3,5,4,2,1を含むリストを宣言
        List<int> numbers = new List<int> { 3, 5, 4, 2, 1 };
        Debug.Log(numbers[3]);//結果は2
        numbers[3] = 100;
        Debug.Log(numbers[3]);//結果は100
 ``` 

###④リストに要素を追加、複数追加
リストには要素を最後尾に追加するAddと、要素を複数まとめて最後尾に追加するAddRangeがある

```C#
        List<int> numbers = new List<int>();
        numbers.Add(3);
        int[] addNumbers = new int[]{4,5,6};
        numbers.AddRange(addNumbers);
        Debug.Log(numbers.Count);//結果は4//リストの中身は{3,4,5,6}
```

###⑤リストから要素を削除
リストには配列にはない、特定の要素を削除するRemoveと、指定番号の要素を削除するRemoveAtがある。
Removeは同じ要素が複数あっても、一番左にある一つだけを削除する。
RemoveもRemoveAtも空欄を残さず、右の要素は左に一つシフトして空欄を埋める

```C#
        List<int> numbers = new List<int> {1,2,3,3,5 };
        numbers.Remove(3);//3を削除、リストの中身は{1,2,3,5}になる
        numbers.RemoveAt(3);//リストの中身は{1,2,3}になる
```

###⑥リストに要素を挿入

```C#
        List<int> numbers = new List<int> {1,2,3,3,5 };
        numbers.Insert(3,9);//3番目に9を挿入する
        //リストの中身は{1,2,3,9,3,5}に
```

###⑦リストに特定要素があるかどうか

```C#
        List<int> numbers = new List<int> {1,2,3,3,5 };
        Debug.Log(numbers.Contains(6));//結果はfalse
        Debug.Log(numbers.Contains(5));//結果はtrue
```

###⑧リスト要素の並べ替え

```C#
        List<int> numbers = new List<int> {3,2,4,5,1 };
        numbers.Sort();//リストの中身が{1,2,3,4,5}に
```

###⑨リストから同じ要素を持つ配列を作る

```C#
        List<int> numbers = new List<int> {3,2,4,5,1 };
        int[] numArray = numbers.ToArray();
```

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr"><a href="https://twitter.com/hashtag/unity?src=hash&amp;ref_src=twsrc%5Etfw">#unity</a> <a href="https://twitter.com/hashtag/indiedev?src=hash&amp;ref_src=twsrc%5Etfw">#indiedev</a> <a href="https://twitter.com/hashtag/gamedev?src=hash&amp;ref_src=twsrc%5Etfw">#gamedev</a> <a href="https://twitter.com/hashtag/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E5%88%9D%E5%BF%83%E8%80%85?src=hash&amp;ref_src=twsrc%5Etfw">#プログラミング初心者</a> <br>前回の話のおまけw<br><br>【Unityコラム】番外編：配列とリストとメモリーの話 <a href="https://t.co/uOhT5KT6jJ">https://t.co/uOhT5KT6jJ</a> <a href="https://twitter.com/YouTube?ref_src=twsrc%5Etfw">@YouTube</a>より <a href="https://t.co/vsj7ObLZKH">pic.twitter.com/vsj7ObLZKH</a></p>&mdash; 徒ちゃん(キャットカベツ) (@catcubbage) <a href="https://twitter.com/catcubbage/status/1402578763364200452?ref_src=twsrc%5Etfw">June 9, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>