[第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を使う場合は、冒頭に以下のスクリプトが存在しなければならないので、必ず記述するようにしてください。(このGenericの1機能がListになるためです。)

Listの宣言:new

Listも変数の一種になるので、宣言する必要があります。

Listの宣言方法は以下になります。

このスクリプトではint型のListを作成しましたが、String型やGameObject型など、Unityで使える型での宣言も可能です。

Listの初期化

Listを初期化する場合は以下のスクリプトを使用します。

考え方はシンプルで、既に作成したListに新しい空白のListをnewで宣言してあげればよいのです。

要素の追加:Add,Insert

Listは要素を追加できる配列のようなものなので、要素を追加したい場合は以下のスクリプトを利用します。

上記は末尾に追加する方法と指定したn番目に追加する方法になります。

注意事項として、先頭の要素を0番目と扱うので先頭に挿入する場合は0を、n-1番目を選択したい場合はnをInsertで指定する必要があります。

例えばint型Listがn個の要素を持っている時のn番目は以下のような対応になっています。

複数要素を同時追加:AddRange,InsertRange

Listに複数要素を同時に追加することもできます。

この場合は他のListもしくは配列(Array)を追加することになるので、事前に準備が必要です。

スクリプトは以下になります。

要素の更新

要素を更新する方法は以下になります。

追加と同様、要素の指定は(n+1)でn番目を指定できるのでご注意ください。

要素の取得

Listの要素を取得したい場合は以下のスクリプトを使います。

追加と同様、要素の指定は(n+1)でn番目を指定できるのでご注意ください。

要素の削除:Remove,RemoveAt,RemoveRange,Clear

Listの要素を削除したい場合、以下のスクリプトを使います。

あるn番目を削除、m~n番目の要素全てを削除、全て削除、指定した値が含まれている要素を削除などが行えます。

Listの要素並び替え:Sort

要素を昇順や降順に並び替えることもできます。

この場合に使用するメソッドはSortです。

ちなみに、Sortの処理速度ですが基本的にはList.Sortの方がラムダ式のソートより速くなります。

要素のインテックスの取得:IndexOf

指定した値を持つ要素が何番目の要素なのかを取得することもできます。

その際に使用するスクリプトは以下です。

指定した要素が見つかった場合、「0」から始まるインデックス番号を返します。

一方で見つからなかった場合には-1を返します。

要素数の取得:Count

Listに何個の要素が存在するのかを取得することもできます。

その際に使用するスクリプトは以下です。

要素の存在判定:Countains

Listの要素の中に「100」が存在するかどうかを判定することができます。

この関数で返ってくる値はBool値(true/false)なので、Bool型の変数を用意する必要があります。

要素の検索:Find,FindLast,FindAll

条件を設定して、その条件に当てはまる要素を取得することもできます。

この際に使用するメソッドはFind,FindLast,FindAllになります。

FindはListの先頭から順番に検索し、最初に当てはまるものを返すメソッドになります。

FindLastは後ろから検索し、最初に当てはまるものを返すメソッドになります。

FindAllは条件に当てはまる要素全てを返すメソッドになります。

例えば、偶数の要素を抽出したい場合に使うスクリプトは以下になります。

要素を逆順に並び替える:Reverse

Listの要素を逆順にする関数も存在します。

例えば、「5,6,1,3,9」というlistが存在した場合、RevListには「9,3,1,6,5」が代入されます。

Listを配列に変換する:ToArray

Listを配列に変換することもできます。

Listの実践的な使い方

Listには様々な使用例がありますが、その中でもよく使用する、複数メソッドを組み合わせたスクリプトをご紹介します。

下記を参考にし、自らの実現したい動作を作れるようになりましょう。

全ての要素を取得する

Listの全ての要素を抽出することも、メソッドを複数組み合わせることで実現することができます。

今回使うメソッドはnew listとforeachになります。

実行結果はもちろん1,2,3,4,5となります。

末尾の要素を取得する

末尾の要素を取得したい場合にcountとn番目の要素取得を組み合わせて実現します。

List1でのスクリプトは以下になります。

list.Countで要素数を抽出し、要素数-1が末尾の要素になるので、list.Count-1としています。

まとめ

いかがでしたでしょうか。

今回はC#のListについてご紹介してきました。

「どのくらいの値を管理するかわからないから、保存する値の数を定義できない」という時に配列の代わりにListを使ってください。

Listの基本的なメソッドは全て記載しているので、本記事をリファレンス代わりに使用していただけると幸いです。

他の回の記事について気になる方はこちらをクリック


A-kun