C#のコレクションとは?List・Dictionary・HashSetの基本を解説
生徒
「先生、C#でたくさんのデータをまとめて扱いたいときはどうしたらいいですか?」
先生
「そのときに便利なのがコレクションと呼ばれる仕組みです。データをひとまとめにして管理できますよ。」
生徒
「コレクションって具体的にはどんなものですか?」
先生
「代表的なものに、List・Dictionary・HashSetがあります。それぞれ役割が違うので順番に説明しますね。」
1. C#のコレクションとは?
C#のコレクション(Collection)とは、複数のデータをまとめて扱うための仕組みです。プログラミング未経験の方にわかりやすく説明すると、コレクションは「データを入れる箱や棚」のようなイメージです。普通の変数では1つの値しか入れられませんが、コレクションを使えばたくさんの値をまとめて管理できます。
例えば、「クラスの出席番号リスト」や「電話帳の名前と電話番号の組み合わせ」などをプログラムで表現するときにコレクションが役立ちます。
コレクションにはいろいろな種類がありますが、C#でよく使うのは以下の3つです。
- List(順番付きのリスト)
- Dictionary(キーと値のペアで管理する辞書)
- HashSet(重複を許さない集合)
2. Listの基本(順番が大事なコレクション)
Listは、順番を持ったデータの集まりです。イメージとしては「番号付きの棚」に物を並べるようなものです。リストに入れたデータは追加した順番が保持され、同じ値を何度も入れることができます。
例えば、生徒の名前を順番に並べたいときに使います。
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
List<string> names = new List<string>();
names.Add("太郎");
names.Add("花子");
names.Add("次郎");
foreach (string name in names)
{
Console.WriteLine(name);
}
}
}
太郎
花子
次郎
Listは「順番が大事」「同じデータを入れてもOK」という特徴があります。
3. Dictionaryの基本(辞書のように管理するコレクション)
Dictionaryは、データを「キー(見出し)」と「値(内容)」の組み合わせで管理します。これはまさに辞書のようなイメージです。例えば「名前」と「電話番号」をペアにして保存することができます。
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
Dictionary<string, string> phoneBook = new Dictionary<string, string>();
phoneBook["太郎"] = "090-1111-2222";
phoneBook["花子"] = "080-3333-4444";
Console.WriteLine(phoneBook["太郎"]);
}
}
090-1111-2222
Dictionaryは「名前から電話番号を探す」といった使い方に非常に便利です。キーは重複できませんが、値は重複してもかまいません。
4. HashSetの基本(重複を許さないコレクション)
HashSetは、データの「集合(しゅうごう)」を表すコレクションです。同じデータを二度入れても、自動的に1つにまとめられます。例えば「参加者の名簿」など、同じ名前を重複させたくない場合に役立ちます。
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
HashSet<string> participants = new HashSet<string>();
participants.Add("太郎");
participants.Add("花子");
participants.Add("太郎"); // 重複は無視される
foreach (string p in participants)
{
Console.WriteLine(p);
}
}
}
太郎
花子
HashSetは「データを一意に管理したい」「同じものを二度数えたくない」ときに最適です。
5. List・Dictionary・HashSetの違いをイメージで理解しよう
ここまで説明した3つのコレクションを、身近な例で比べてみましょう。
- List = 「順番通りに並べた買い物リスト」
- Dictionary = 「名前から電話番号を調べる電話帳」
- HashSet = 「重複を許さない参加者名簿」
どのコレクションを使うかは、データをどう管理したいかによって決まります。順番が大事ならList、キーと値のペアで管理したいならDictionary、重複を避けたいならHashSetを選びましょう。
まとめ
C#のコレクションであるListやDictionaryやHashSetは、初心者が複数の値を扱うときにとても役立つ仕組みであり、それぞれに順番の管理や重複の扱い方や検索のしやすさなどの特徴があるので、どのような場面でどのコレクションを選ぶべきかを理解しておくことで、大規模な処理や細かいロジックを組み立てるときにも柔軟に対応できるようになることが多く、C#の基本学習の中でも特に大切な部分として意識しておくとよいという点が今回の振り返りで印象に残るところだと思われるため、実際に手を動かしながら使い分けを試してみることで、より自然に使えるようになるはずだと感じられる内容であり、順番が必要なときにはListを、検索を素早く行いたいときにはDictionaryを、重複を避けて管理したいときにはHashSetを選ぶという基本的な判断が身につけば、プログラム全体の見通しもよくなりエラーや動作の不具合にも気づきやすくなるため、これからC#の実践的なプログラムを書くうえで大きな助けになるといえるので、今回の知識をしっかり身につけておくことで後の学習も進めやすくなると思われる状態であるといえる。 また、ListやDictionaryやHashSetはいずれも.NETの基盤に組み込まれた信頼性の高いコレクションなので、安心して利用できるだけでなく、さまざまなメソッドや便利な機能が用意されているため、ただ使い方を覚えるだけではなく、その特徴を理解しながら設計段階で正しく選べるようになることが大切であり、慣れてくると柔軟なデータ操作や拡張しやすいプログラムが書けるようになるため、繰り返し触れて理解を深めていくことが重要だと感じられる。
コレクションの使い分けの実例
ここでは、ListやDictionaryやHashSetを実際のプログラムでどのように使い分けるかがイメージしやすいように、簡単なサンプルプログラムをまとめ直した例を確認しておくことで、振り返りをより深めておきたいと思われる。
// Listで順番を管理
List<string> fruits = new List<string>();
fruits.Add("りんご");
fruits.Add("みかん");
fruits.Add("ぶどう");
// Dictionaryで素早く検索
Dictionary<string, int> scores = new Dictionary<string, int>();
scores["太郎"] = 80;
scores["花子"] = 95;
// HashSetで重複の排除
HashSet<string> uniqueNames = new HashSet<string>();
uniqueNames.Add("太郎");
uniqueNames.Add("花子");
uniqueNames.Add("太郎"); // 無視される
このように、場面ごとに適したコレクションを選ぶことが大切であり、実際の開発でも必要に応じて適切なコレクションを判断する力が求められるため、今回のような基本的な理解を積み重ねていくことで応用しやすい知識として身に付いていくはずである。
生徒
「今日の内容で、ListやDictionaryやHashSetの違いがようやく分かってきました。特に、何を基準にして選べばいいのかが理解できたのがよかったです。」
先生
「その調子です。C#ではコレクションをどう使い分けるかがとても重要なので、最初の段階でしっかり基礎が身についていると、これから複雑なプログラムを書くときにも迷わずに設計できるようになりますよ。」
生徒
「たしかに、順番が大切ならList、検索ならDictionary、重複をなくしたいならHashSet、という考え方は分かりやすかったです。今後の実装でも使い分けられそうです。」
先生
「実際の現場でもよく使われる基本知識なので、これから先で扱うコレクションの応用やLINQの処理を学ぶときにもきっと役立ちます。焦らず一つずつ慣れていきましょう。」
生徒
「ありがとうございます。次の学習でも今日の内容を活かしながら進めてみます。」