[第13回] List(リスト)の基本的な使い方を学ぶ|Unityで学ぶC#入門
「Unityで学ぶC#入門」の連載第12回は「クラスの基本的な使い方を学ぶ」でした。
第13回の今回はList(リスト)の基本的な使い方を学びます。
データをまとまりとして保存する場合に利用するのが配列ですが、用途によっては配列が適切ではない場合があります。
例えば、RPGのゲームでアイテムの一覧を変数に保存する場合、アイテムを増やしていく時に配列だとアイテム数に上限が出来てしまうので適切ではありません。このような場合に使うのがlistになります。
今回はlistの基本的な使い方と配列との違いに焦点を当てて解説します。
List(リスト)とは
listとは、同じデータ型の値をまとめて保存し利用するためのものです。
配列と似ていますが、配列と異なる点は要素数が固定ではないという点です。また、Listの方が少し処理に時間がかかるという点もあります。
そのため、C#において複数のデータを同時に扱いたい場合に、データの要素を増減させる時はlistを使い、データ要素数が変わらない時は配列を使うことが多いです。
配列については、第10回の講義で詳しく解説しているので、配列についても学びたい方は是非ご一読ください。
Listの基本的な使い方
ではまずListの基本的な使い方を解説していきます。
Listの宣言方法から、要素の追加・更新・削除・取得など基本的なListのメソッドの説明になります。
以下は目次になります(目次の項目をクリックすると解説部分まで遷移します)
- Listを使うために必要なGeneric
- Listの宣言:new
- Listの初期化
- 要素の追加:Add,Insert
- 複数要素を同時追加:AddRange,InsertRange
- 要素の更新
- 要素の取得
- 要素の削除:Remove,RemoveAt,RemoveRange,Clear
- Listの要素並び替え:Sort
- 要素のインデックスの取得:IndexOf
- 要素数の取得:Count
- 要素の存在判定:Countains
- 要素の検索:Find,FindLast,FindAll
- 要素を逆順に並び替える:Reverse
- Listを配列に変える:ToArray
Listを使うために必要なGeneric
Listを使う場合は、冒頭に以下のスクリプトが存在しなければならないので、必ず記述するようにしてください。(このGenericの1機能がListになるためです。)
1 |
using System.Collections.Generic; |
Listの宣言:new
Listも変数の一種になるので、宣言する必要があります。
Listの宣言方法は以下になります。
1 |
List<int> List1 = new List<int>(); |
Listの初期化
Listを初期化する場合は以下のスクリプトを使用します。
1 2 |
//List1を初期化 var List1 = new List<int>(); |
考え方はシンプルで、既に作成したListに新しい空白のListをnewで宣言してあげればよいのです。
要素の追加:Add,Insert
Listは要素を追加できる配列のようなものなので、要素を追加したい場合は以下のスクリプトを利用します。
1 2 3 4 5 |
//要素"2"をListの末尾に追加する List1.Add(1); //リストの4番目に要素"4"を挿入する List1.Insert(3, 4); |
上記は末尾に追加する方法と指定したn番目に追加する方法になります。
注意事項として、先頭の要素を0番目と扱うので先頭に挿入する場合は0を、n-1番目を選択したい場合はnをInsertで指定する必要があります。
例えばint型Listがn個の要素を持っている時のn番目は以下のような対応になっています。
複数要素を同時追加:AddRange,InsertRange
Listに複数要素を同時に追加することもできます。
この場合は他のListもしくは配列(Array)を追加することになるので、事前に準備が必要です。
スクリプトは以下になります。
1 2 3 4 |
//List1に複数要素(otherList)を追加 List1.AddRange(otherList); //List1に複数要素を2番目に追加 List1.InsertRange(3,other.List); |
要素の更新
要素を更新する方法は以下になります。
1 2 |
//リストの2番目の要素を"1"に更新する list[1] = 1; |
追加と同様、要素の指定は(n+1)でn番目を指定できるのでご注意ください。
要素の取得
Listの要素を取得したい場合は以下のスクリプトを使います。
1 2 |
//listの0番目の要素を抽出する int int1 = list[0]; |
追加と同様、要素の指定は(n+1)でn番目を指定できるのでご注意ください。
要素の削除:Remove,RemoveAt,RemoveRange,Clear
Listの要素を削除したい場合、以下のスクリプトを使います。
あるn番目を削除、m~n番目の要素全てを削除、全て削除、指定した値が含まれている要素を削除などが行えます。
1 2 3 4 5 6 7 8 9 10 11 |
//3番目の要素を削除 list.RemoveAt(2); //要素"100"を削除する list.Remove(100); //2番目~5番目の要素を削除する list.RemoveRange(1,4); //全ての要素を削除する list.Clear(); |
Listの要素並び替え:Sort
要素を昇順や降順に並び替えることもできます。
この場合に使用するメソッドはSortです。
1 2 3 4 5 |
List List1 = new List (4,3,2,1,5); //Sortで昇順に並び替え(1,2,3,4,5) List1.Sort(); //ラムダ式を使って降順に並び替え(5,4,3,2,1,) List1.Sort(( a , b ) => b - a); |
ちなみに、Sortの処理速度ですが基本的にはList.Sortの方がラムダ式のソートより速くなります。
要素のインテックスの取得:IndexOf
指定した値を持つ要素が何番目の要素なのかを取得することもできます。
その際に使用するスクリプトは以下です。
1 2 |
//List1の中の「100」という値を持つ要素のインテックスを取得 var index = List1.IndexOf(100); |
指定した要素が見つかった場合、「0」から始まるインデックス番号を返します。
一方で見つからなかった場合には「-1」を返します。
要素数の取得:Count
Listに何個の要素が存在するのかを取得することもできます。
その際に使用するスクリプトは以下です。
1 2 |
//listの要素数をcount1に取得する int count1 = list.Count; |
要素の存在判定:Countains
Listの要素の中に「100」が存在するかどうかを判定することができます。
1 2 |
//listの中に「100」という要素が存在するか bool bool1 = list.Contains(100); |
この関数で返ってくる値はBool値(true/false)なので、Bool型の変数を用意する必要があります。
要素の検索:Find,FindLast,FindAll
条件を設定して、その条件に当てはまる要素を取得することもできます。
この際に使用するメソッドはFind,FindLast,FindAllになります。
FindはListの先頭から順番に検索し、最初に当てはまるものを返すメソッドになります。
FindLastは後ろから検索し、最初に当てはまるものを返すメソッドになります。
FindAllは条件に当てはまる要素全てを返すメソッドになります。
例えば、偶数の要素を抽出したい場合に使うスクリプトは以下になります。
1 2 3 4 5 6 7 8 9 |
List List1 = new List (6,7,2,8,10); //Findで6が返ります。 int result1 = List1.Find (n => n%2 == 0); //FindLastで10が返ります。 int result2 = List1.FindLast ( n => n%2 ==0); //FindAllでは6,2,8,10が返ります。 int result3 = List1.FindAll ( n => n%2 == 0); |
要素を逆順に並び替える:Reverse
Listの要素を逆順にする関数も存在します。
例えば、「5,6,1,3,9」というlistが存在した場合、RevListには「9,3,1,6,5」が代入されます。
1 2 |
//listの要素を逆順に並び替える List Revlist = list.Reverse(); |
Listを配列に変換する:ToArray
Listを配列に変換することもできます。
1 2 |
//listを配列に変換する Int[] Ar = list.ToArray(); |
Listの実践的な使い方
Listには様々な使用例がありますが、その中でもよく使用する、複数メソッドを組み合わせたスクリプトをご紹介します。
下記を参考にし、自らの実現したい動作を作れるようになりましょう。
全ての要素を取得する
Listの全ての要素を抽出することも、メソッドを複数組み合わせることで実現することができます。
今回使うメソッドはnew listとforeachになります。
1 2 3 4 5 6 7 |
List List1 = new List(1,2,3,4,5); //foreach(型 in リスト名)で型に当てはまる全ての要素を指定 foreach(int chr in List1) { //抽出した値を返す Console.WriteLine("{0}", int); } |
実行結果はもちろん1,2,3,4,5となります。
末尾の要素を取得する
末尾の要素を取得したい場合にcountとn番目の要素取得を組み合わせて実現します。
List1でのスクリプトは以下になります。
1 |
string str = List1(List1.Count - 1 ); |
list.Countで要素数を抽出し、要素数-1が末尾の要素になるので、list.Count-1としています。
まとめ
いかがでしたでしょうか。
今回はC#のListについてご紹介してきました。
「どのくらいの値を管理するかわからないから、保存する値の数を定義できない」という時に配列の代わりにListを使ってください。
Listの基本的なメソッドは全て記載しているので、本記事をリファレンス代わりに使用していただけると幸いです。
他の回の記事について気になる方はこちらをクリック
この記事はいかがでしたか?
もし「参考になった」「面白かった」という場合は、応援シェアお願いします!