VB.NETのList(Of T)の使い方を完全ガイド!初心者が最初に覚えるべきリスト操作
生徒
「配列(Array)って、後からデータの数を増やすのが結構大変ですよね……もっと楽にデータを追加したり消したりする方法はありませんか?」
先生
「その悩み、VB.NETの『List(Of T)』という機能が解決してくれますよ。サイズを気にせずにどんどんデータを詰め込める魔法の袋のようなものです。」
生徒
「魔法の袋ですか!具体的には配列と何が違うんですか?」
先生
「一番の違いは、自動で大きさが変わることです。それでは、基本的な使い方を一緒に学んでいきましょう!」
1. List(Of T)とは?配列との違いを解説
VB.NETで複数のデータをまとめて扱う道具をコレクションと呼びます。その中でも、最も頻繁に使われるのが今回紹介するList(Of T)です。プログラミング初心者の方にとって、配列とリストの違いを理解することは非常に大切です。
配列は、最初に「箱の数は10個」と決めたら、その枠を後から変えるのに手間がかかります(ReDimなどを使います)。一方、リストは動的(どうてき)にサイズが変化します。データを入れたいときにAddという命令を出すだけで、コンピュータが自動的に新しい場所を用意してくれます。例えるなら、配列が「座席数が決まっている映画館の指定席」なら、リストは「後からどんどん椅子を継ぎ足せる会議室」のようなイメージです。
ちなみに、名前にある(Of T)というのは、ジェネリックと呼ばれる機能の一部で、「どんな種類のデータを入れるか」を指定する場所です。List(Of String)なら「文字のリスト」、List(Of Integer)なら「整数のリスト」という意味になります。これを決めておくことで、間違った種類のデータが混ざるのを防ぐことができます。
2. リストを新しく作る(インスタンス化)
リストを使うためには、まず「これからリストを使いますよ」という準備をする必要があります。これを専門用語でインスタンス化と言います。パソコンを触ったことがない方でも、「新しい白紙のリストを一枚用意する」作業だと思えば分かりやすいでしょう。
VB.NETでは、Newというキーワードを使ってリストを作成します。以下のコードを見てみましょう。
' 文字列を入れるための新しいリストを作成する
Dim memberList As New List(Of String)()
' 数値を入れるための新しいリストを作成する
Dim scoreList As New List(Of Integer)()
Dimは「変数(データの入れ物)を作るよ」という合図、As Newは「新しい実体を作るよ」という意味です。これで、自由にデータを追加できる空のリストが出来上がりました。プログラミング未経験の方は、まずこの一行を書くことがスタート地点になります。
3. データを追加する(Addメソッド)
リストにデータを追加するのは非常に簡単です。リスト名に続けて.Add()と書くだけです。この「.(ドット)」の後に続く命令を、プログラミングの世界ではメソッドと呼びます。
実際に、お買い物リストを作るイメージでコードを書いてみましょう。
Dim shoppingList As New List(Of String)()
' リストに項目を追加していく
shoppingList.Add("りんご")
shoppingList.Add("牛乳")
shoppingList.Add("たまご")
' この時点でリストの中には3つの言葉が入っています
配列のように「何番目の箱に入れるか」を気にする必要はありません。Addを使えば、自動的にリストの最後尾にデータが追加されていきます。データを一つ増やすたびに、リストの長さも自動的に1、2、3……と伸びていくので、管理が非常に楽になります。
4. 特定の場所のデータを取り出す(参照)
リストに入れたデータを取り出すときは、配列と同じように「インデックス」を使います。インデックスとは、リストの中での「背番号」のようなものです。ここで注意が必要なのが、VB.NETを含め多くのプログラミング言語では、数字は「0」から数え始めるというルールです。
1番目のデータを見たいときは「0」、2番目のデータを見たいときは「1」を指定します。パソコン初心者の方が最も間違えやすいポイントなので、しっかり覚えておきましょう。
Dim colors As New List(Of String)()
colors.Add("赤")
colors.Add("青")
' 0番目(1つ目)のデータを取り出して表示する
Console.WriteLine(colors(0)) ' 「赤」が表示される
' 1番目(2つ目)のデータを取り出して表示する
Console.WriteLine(colors(1)) ' 「青」が表示される
もしリストに入っている数以上の番号(例えば、2つしかデータがないのに「10番目を見せて」など)を指定すると、エラーが発生してプログラムが止まってしまいます。これを防ぐためには、次に説明する「データの数を確認する方法」を知っておく必要があります。
5. リストの件数を確認する(Countプロパティ)
リストの中に今いくつデータが入っているかを知るには、Count(カウント)という機能を使います。これは、名簿の人数を数えて教えてくれる事務員さんのような役割です。
データの総数がわかれば、画面に「全部で〇件あります」と表示したり、データの数だけ処理を繰り返したりすることが可能になります。
Dim animals As New List(Of String)()
animals.Add("イヌ")
animals.Add("ネコ")
animals.Add("ウサギ")
' リストの件数を取得する
Dim totalCount As Integer = animals.Count
Console.WriteLine("動物の数は " & totalCount & " 匹です")
動物の数は 3 匹です
プログラミングでは、このCountを使って「データが空っぽじゃないかな?」とチェックすることもよくあります。初心者のうちは、何か処理をする前に「今、中身は何個あるかな?」と確認する癖をつけると、ミスが少なくなりますよ。
6. データを削除する(Remove・RemoveAt)
リストの素晴らしいところは、追加だけでなく削除も自由自在な点です。主に2つの方法があります。一つは「消したい言葉」を直接指定する方法、もう一つは「消したい番号」を指定する方法です。
消しゴムで間違えた文字を消すように、リストから不要なデータを消してみましょう。
Dim tasks As New List(Of String)()
tasks.Add("掃除")
tasks.Add("洗濯")
tasks.Add("料理")
' 方法1:「洗濯」という言葉を直接指定して消す
tasks.Remove("洗濯")
' 方法2:0番目(一番上)のデータを番号で指定して消す
tasks.RemoveAt(0)
' 全てを一度に消して空っぽにするならこれ
tasks.Clear()
Removeを使うと、リストの中を上から探して最初に見つかったものを消してくれます。RemoveAtはピンポイントで場所を狙って消すときに便利です。データを消すと、その後ろにあったデータは自動的に前に詰められます。これが配列にはないリストの大きな利点です。隙間ができず、常にデータが詰まった状態を保ってくれます。
7. データの存在を確認する(Containsメソッド)
「この名簿の中に、田中さんはいるかな?」と調べたいときに便利なのがContains(コンテインズ)です。この命令は、リストの中に指定したデータがあるかどうかを調べて、「はい(True)」か「いいえ(False)」で答えてくれます。
この機能を使うと、プログラムの中で「もしリストに含まれていたら〇〇する」といった、条件に応じた動きを作ることができます。
Dim users As New List(Of String)()
users.Add("Alice")
users.Add("Bob")
' 「Bob」が含まれているかチェック
If users.Contains("Bob") Then
Console.WriteLine("ボブさんはリストに登録されています。")
Else
Console.WriteLine("ボブさんは見つかりませんでした。")
End If
「探す」という作業はプログラミングにおいて非常に重要です。自分で一つ一つデータを確認するコードを書かなくても、Contains一行で済んでしまうのは非常に効率的ですね。
8. データを並べ替える(Sortメソッド)
最後に、バラバラに入れたデータをあいうえお順や数字の小さい順に並べ替える方法を紹介します。これがSort(ソート)メソッドです。膨大なデータを扱う際、整理整頓されていると見やすさが格段に上がります。
以下のサンプルコードで、数字を並べ替えてみましょう。
Module Module1
Sub Main()
Dim numbers As New List(Of Integer)()
numbers.Add(50)
numbers.Add(10)
numbers.Add(30)
' 小さい順に並べ替える
numbers.Sort()
Console.WriteLine("並べ替え後のデータ:")
For Each n As Integer In numbers
Console.WriteLine(n)
Next
End Sub
End Module
並べ替え後のデータ:
10
30
50
このように、Sortを使うだけで自動的に中身が整理されます。文字列の場合は辞書順(あいうえお順やアルファベット順)になります。難しい並び替えの計算を自分で考えなくても、コンピュータにお任せできるので、どんどん活用していきましょう。