VB.NETの配列・リストを結合・分割する方法を完全ガイド!初心者でもわかる操作術
生徒
「先生、別々に作った『買い物リスト』と『お土産リスト』を、一つの大きなリストにまとめる方法はありますか?」
先生
「ありますよ!VB.NETでは、配列やリストを『結合』したり、逆に必要な部分だけを『分割』したりする機能が備わっています。」
生徒
「バラバラのデータを一つにしたり、切り分けたりできれば便利そうですね。難しくないですか?」
先生
「基本さえ覚えれば簡単です。日常の作業に例えながら、結合と分割のテクニックを学んでいきましょう!」
1. 配列やリストの「結合」と「分割」とは?
プログラミングをしていると、バラバラになっているデータを一つにまとめたい(結合)ときや、逆に大きすぎるデータの一部だけを取り出したい(分割)ときが頻繁にあります。
例えば、前編と後編に分かれた動画のデータを一つに繋げたり、名簿の中から「最初の5人だけ」を抜き出したりする作業です。VB.NET(ヴィービー・ドットネット)では、コレクション(データの集まり)を自由自在に操るための命令が用意されています。これらをマスターすることで、データの加工が驚くほどスムーズになります。
2. リスト(List)を結合する「AddRange」
最も使いやすく、初心者の方向けなのが、List(リスト)の結合です。リストには AddRange(アド・レンジ)という命令があります。これは、今あるリストの末尾に、別のリストを「範囲(レンジ)ごと追加(アド)する」という意味です。
例えば、「野菜リスト」に「果物リスト」を結合して、一つの「食料品リスト」を作る場面をイメージしてください。
' 野菜リストを作成
Dim vegetables As New List(Of String) From {"キャベツ", "レタス"}
' 果物リストを作成
Dim fruits As New List(Of String) From {"リンゴ", "バナナ"}
' 野菜リストに果物リストを結合します
vegetables.AddRange(fruits)
' 結果を確認
For Each item In vegetables
Console.WriteLine(item)
Next
実行結果は以下の通りです。
キャベツ
レタス
リンゴ
バナナ
このように、AddRange を使うだけで、二つの集まりをガッチャンコと一つに繋げることができます。
3. 配列(Array)を結合する簡単な方法
次に配列(はいれつ)の結合です。配列はリストと違い、後からサイズを変えるのが苦手な性質を持っています。しかし、VB.NETでは「LINQ(リンク)」という便利な機能の中にある Concat(コンキャット)という命令を使うことで、配列同士をスマートに結合できます。
Concat は英語で「連結する」という意味です。結合した結果を、新しい配列として受け取るのがポイントです。
' 前半の出席番号
Dim groupA() As Integer = {1, 2, 3}
' 後半の出席番号
Dim groupB() As Integer = {4, 5, 6}
' 二つの配列を結合して新しい配列を作ります
Dim allMembers() As Integer = groupA.Concat(groupB).ToArray()
' 結果を表示
Console.WriteLine(String.Join(", ", allMembers))
実行結果は以下の通りです。
1, 2, 3, 4, 5, 6
ここで使った ToArray(トゥ・アレイ)という命令は、結合したデータを「最後にもう一度しっかりとした配列の形に整える」という役割を持っています。
4. リストから一部分を抜き出す「GetRange」
今度は「分割」や「抜き出し」に注目しましょう。リストの一部だけを取り出したいときは、GetRange(ゲット・レンジ)を使います。
これは「〇番目から、〇個分だけ取ってきて!」という命令です。例えば、10人いる名簿から「3番目の人から2人分」を取り出すといった使い方ができます。プログラミングの数え方は0番から始まることを忘れないようにしましょう。
Dim numbers As New List(Of String) From {"A", "B", "C", "D", "E"}
' 1番目(B)から、3個分(B, C, D)を取り出します
Dim subList As List(Of String) = numbers.GetRange(1, 3)
For Each s In subList
Console.WriteLine(s)
Next
実行結果は以下の通りです。
B
C
D
大きな塊を、扱いやすい小分けのパックにするような感覚ですね。
5. 配列を分割する「Skip」と「Take」の合わせ技
配列を分割する場合、Skip(スキップ:飛ばす)と Take(テイク:取る)という命令を組み合わせると非常に分かりやすくなります。
「最初の2つを飛ばして、その後の3つを取る」といった日本語に近い感覚でコードが書けます。これも先ほどのLINQという機能の一部です。
Dim original() As String = {"月", "火", "水", "木", "金", "土", "日"}
' 最初の5つを飛ばして、残りの2つを取る(土日だけ抽出)
Dim weekend() As String = original.Skip(5).Take(2).ToArray()
For Each day In weekend
Console.WriteLine(day & "曜日")
Next
実行結果は以下の通りです。
土曜日
日曜日
6. 文字列を分割して配列にする「Split」
少し応用編ですが、非常に実用的なのがSplit(スプリット)です。一つの長い文字列を、カンマ(,)やスペースで区切って、配列に分割します。
例えば、「ペン,ノート,消しゴム」という一つの文章を、それぞれ独立した「ペン」「ノート」「消しゴム」というデータに切り分けるときに使います。csvファイルなどのデータを読み込む際によく使われるテクニックです。
7. 結合・分割時に注意すべき「空のデータ」
データを結合したり分割したりする際、初心者がハマりやすいのが「空っぽのデータ」を扱ってしまったときのエラーです。
例えば、中身が何もないリストに対して「3つ分取ってきて」と命令すると、パソコンは「そんなものはないよ!」とパニックを起こしてエラー(例外)を発生させます。作業をする前に、If文を使って「中身がちゃんとあるかな?」と確認するクセをつけると、より壊れにくい丈夫なプログラムになります。
8. パフォーマンスを意識した使い分け
結合や分割を何度も何度も、例えば数万回繰り返すようなプログラムを作る場合、配列よりもリストの方が有利なことが多いです。配列は結合のたびに新しい場所をメモリ(パソコンの作業机)に確保し直すため、少し時間がかかるからです。
逆に、一度結合してしまえばその後は内容を変えないという場合は、配列の方がメモリの節約になります。とはいえ、最初のうちはあまり難しく考えすぎず、「操作が簡単なのはリスト」と覚えておけば十分です。
9. 実践!複数のリストを一つにまとめる
最後に、複数のリストを順番に一つのリストへ統合していく実践的なイメージを掴みましょう。
Dim teamA As New List(Of String) From {"田中", "佐藤"}
Dim teamB As New List(Of String) From {"鈴木", "高橋"}
Dim teamC As New List(Of String) From {"伊藤", "渡辺"}
' 最終的な全員名簿
Dim allUsers As New List(Of String)
' 次々と追加して結合していく
allUsers.AddRange(teamA)
allUsers.AddRange(teamB)
allUsers.AddRange(teamC)
Console.WriteLine("合計人数は " & allUsers.Count & " 人です。")
このように、AddRange を繰り返すことで、いくつものグループを大きな一つの集まりにまとめることができます。
10. 結合と分割ができるとプログラミングが楽しくなる
配列やリストの結合・分割は、データを自由自在にレイアウトするための基礎体力のようなものです。
「このデータとこのデータをくっつけたらどうなるかな?」「ここだけ切り取って表示したいな」といったアイデアをすぐに形にできるようになります。最初は命令の名前を覚えるのが大変かもしれませんが、実際にパソコンで動かしてみると、その便利さに感動するはずです。まずは身近なデータを結合するところから、一歩ずつ進んでいきましょう!