VB.NETでコレクションをソートする方法を完全ガイド!並び替えの基本
生徒
「VB.NETでバラバラに並んだ数字や名前を、小さい順やアイウエオ順に並び替えたいのですが、何か良い方法はありますか?」
先生
「それは『ソート』という機能を使えば解決しますよ。VB.NETにはデータを自動で並び替える便利な命令がたくさん用意されています。」
生徒
「ソート、かっこいい響きですね!初心者でも簡単に書けますか?」
先生
「もちろんです。リストの基本機能から、少し応用した並び替えまで一緒に見ていきましょう!」
1. ソートとは?データの整理整頓
プログラミングにおけるソート(Sort)とは、特定の規則に従ってデータを並び替える処理のことです。例えば、バラバラに届いたメールを日付の新しい順に並べたり、テストの点数が高い順に生徒の名前を並べたりする作業を指します。
VB.NET(ヴィービー・ドットネット)では、配列やコレクション(データの集まり)に対してこのソート処理を行うことが非常に得意です。データを整理することで、特定の情報を探しやすくしたり、見やすい一覧表を作成したりできるようになります。
2. 小さい順(昇順)と大きい順(降順)の違い
ソートには大きく分けて二つの方向があります。一つは昇順(しょうじゅん)です。これは階段を昇るように、「1, 2, 3...」と小さいものから大きいものへ、あるいは「あ, い, う...」と辞書順に並べることです。
もう一つは降順(こうじゅん)です。これは階段を降りるように、「10, 9, 8...」と大きいものから小さいものへ並べることを指します。プログラミングでは、この二つを使い分けることで、ランキング形式の表示や、逆引き辞書のような仕組みを作ることが可能になります。
3. Listの基本機能「Sortメソッド」を使ってみよう
VB.NETで最もよく使われるList(リスト)というコレクションには、自分自身を並び替える Sort(ソート)という命令が備わっています。これを使うのが、最もシンプルで簡単な方法です。
以下のサンプルコードは、バラバラな数字が入ったリストを小さい順に並び替えるプログラムです。
' 数字のリストを作成します
Dim numbers As New List(Of Integer) From {50, 10, 30, 40, 20}
' Sortメソッドを呼び出すだけで、小さい順に並び替わります
numbers.Sort()
' 結果を確認するために画面に表示します
For Each n As Integer In numbers
Console.WriteLine(n)
Next
実行結果は以下の通りです。
10
20
30
40
50
一瞬で綺麗に並び替わりましたね!これがコンピュータの得意分野です。
4. 文字列のリストをアイウエオ順に並べる
数字だけでなく、文字列(名前など)も同じ方法でソートできます。VB.NETは日本語の五十音順やアルファベット順を自動的に判断して並び替えてくれます。
' 名前のリストを作成します
Dim names As New List(Of String) From {"さとう", "あきやま", "たなか"}
' アイウエオ順にソートします
names.Sort()
For Each name As String In names
Console.WriteLine(name)
Next
実行結果は以下の通りです。
あきやま
さとう
たなか
このように、文字の「あいうえお」という順番をプログラムが知っているため、名簿作りも非常に簡単です。
5. 逆順(大きい順)に並び替える「Reverse」
「大きい順にしたいときはどうするの?」という疑問にお答えします。Sort を実行した後に、Reverse(リバース)という命令を使うのが一つの手です。
Reverse は「中身を反対にする」という意味です。小さい順に並べたものをひっくり返せば、結果的に大きい順になります。
Dim scores As New List(Of Integer) From {70, 95, 80}
' まず小さい順に並べます
scores.Sort()
' 次に中身をひっくり返します
scores.Reverse()
For Each s In scores
Console.WriteLine(s & "点")
Next
実行結果は以下の通りです。
95点
80点
70点
6. LINQを使ったもっと自由なソート方法
以前学習したLINQ(リンク)を使うと、さらに直感的に並び替えができます。LINQでは OrderBy(オーダー・バイ)や OrderByDescending(オーダー・バイ・ディセンディング)というキーワードを使います。
この方法の素晴らしい点は、元のリストを壊さずに「並び替えた結果だけ」を別で用意できる点です。元の順番を保持しておきたい場合に非常に重宝します。
7. 配列(Array)のソートはどうやるの?
配列の場合は、Array.Sort(配列名) という特別な書き方をします。配列はリストのように自分自身で「並び替わって!」と動くことができないため、外部の命令を使って並び替えてもらうイメージです。
最近のプログラミングでは、リストを使うことが多いため頻繁には登場しませんが、昔ながらのプログラムを修正する際などに見かけることがあるかもしれません。基本的な考え方はリストの Sort と同じです。
8. ソートする時の注意点とデータ型
ソートを行う際には、データ型(だーたがた)に注意が必要です。例えば、数字の「10」と文字の「"2"」を比べると、文字としてソートした場合は「10」が先に来てしまうことがあります(1で始まるため)。
数字は必ず Integer 型などの数値として、文字は String 型として、正しく型を指定しておくことが、意図した通りのソート結果を得るためのコツです。パソコンに正しく「これは数字だよ」と教えてあげることが大切です。
9. 大文字・小文字や全角・半角の扱い
アルファベットの「A」と「a」、全角の「あ」と半角の「ア」などが混ざっている場合、ソート結果が予想と少し変わることがあります。これはコンピュータが文字に割り振られた「背番号(文字コード)」を基準に判断しているためです。
VB.NETではこれらの違いを無視してソートする設定もありますが、初心者のうちは「文字にはそれぞれ優先順位があるんだな」という程度に覚えておけば大丈夫です。もし変な順番になったら、文字の種類が統一されているか確認してみましょう。
10. ソートをマスターしてデータを見やすく!
データのソートができるようになると、ユーザーにとって非常に使いやすいアプリケーションが作れるようになります。例えば、検索サイトの結果がバラバラだったら困りますよね?
今回学んだ Sort メソッドや LINQ を使いこなすことで、情報を自由自在に操れるようになります。まずは手近なリストを並び替えることから始めて、徐々に複雑なデータの整理にも挑戦していきましょう。プログラミングの楽しさが、また一つ広がりますよ!