C#の集合型(HashSet型)とは?重複しないデータ管理の基本と活用法
生徒
「C#で、同じデータを何回も入れずに管理したいんですが、どうすればいいですか?」
先生
「その場合は、HashSet
という集合型を使うのがおすすめです。重複したデータを自動的に除外してくれますよ。」
生徒
「それって、どうやって使うんですか?配列とかリストとは違うんですか?」
先生
「はい、ちょっと違います。では、C#のHashSet
型について、基本から詳しく見ていきましょう!」
1. HashSet型とは?重複しないデータを管理できるC#の便利な型
HashSet(ハッシュセット)は、C#で使える集合型の一種です。「集合」とは、数学の授業で出てきた「同じものを2つ以上入れない箱」のようなものだと考えてください。HashSet型を使うと、同じデータを何度追加しても、1つだけしか保存されません。
たとえば、果物の名前をリストに入れたいとき、「りんご」「バナナ」「りんご」と2回「りんご」を追加しても、HashSet
では1つの「りんご」しか保存されません。
2. なぜHashSet型が便利なの?
重複を許さないという特徴のおかげで、次のような場面で役立ちます。
- 重複したデータを自動で省きたいとき
- すばやく「このデータが入っているか?」を調べたいとき
- 大量のデータを扱うときに、処理を速くしたいとき
また、HashSet
はデータの順番を気にしないので、「順番はいらないけど、同じものは入れたくない!」という時に最適です。
3. 実際にHashSetを使ってみよう
では、C#のサンプルコードを使って、実際にHashSet
の使い方を見てみましょう。
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
// HashSetの作成
HashSet<string> fruits = new HashSet<string>();
// データを追加
fruits.Add("りんご");
fruits.Add("バナナ");
fruits.Add("りんご"); // 重複するので追加されない
// 表示
foreach (string fruit in fruits)
{
Console.WriteLine(fruit);
}
}
}
実行結果は以下のようになります。
りんご
バナナ
このように、2回追加した「りんご」は、1回しか表示されていません。これがHashSet
の力です!
4. AddメソッドとContainsメソッドの基本
HashSet
では、データを追加するときはAdd
メソッドを使います。すでに同じ値がある場合は追加されません。
また、あるデータが入っているかを調べるにはContains
メソッドを使います。
HashSet<int> numbers = new HashSet<int>();
numbers.Add(10);
numbers.Add(20);
bool hasTen = numbers.Contains(10); // true
bool hasThirty = numbers.Contains(30); // false
Console.WriteLine(hasTen);
Console.WriteLine(hasThirty);
True
False
このように、特定の数字があるかを簡単に確認できます。
5. リストとの違いとは?初心者でも理解できる比較
List
型とHashSet
型の違いが分かりづらいかもしれません。そこで、ポイントをまとめてみましょう。
- List型:順番を大切にしたいときに使う。重複もOK。
- HashSet型:順番は気にせず、重複を避けたいときに使う。
たとえば、ユーザーが選んだ項目を記録するとき、何度同じ選択をしても1回だけ記録したいなら、HashSet
がぴったりです。
6. 応用:重複のあるリストから一意な値を取り出す
実際の場面では、List
にデータを集めたあと、「重複を除きたい」と思うこともあります。そんなときも、HashSet
は便利です。
List<string> names = new List<string>()
{
"田中", "佐藤", "田中", "鈴木"
};
HashSet<string> uniqueNames = new HashSet<string>(names);
foreach (string name in uniqueNames)
{
Console.WriteLine(name);
}
田中
佐藤
鈴木
HashSetにList
のデータをそのまま渡すだけで、重複を自動的に除去できます。
7. 追加・削除・クリアの基本操作
HashSet
では、以下のような基本操作が簡単にできます。
Add
:データを追加するRemove
:特定のデータを削除するClear
:すべてのデータを削除する
HashSet<string> animals = new HashSet<string>();
animals.Add("ねこ");
animals.Add("いぬ");
animals.Remove("ねこ"); // 「ねこ」を削除
animals.Clear(); // 全て削除
これらを組み合わせることで、柔軟にデータを扱うことができます。
8. 注意点とまとめのポイント
HashSet
にはいくつかの注意点もあります。
- 順番は保証されない:表示される順序は毎回変わることがあります。
- データの重複は許されない:あえて同じデータを2つ以上入れたいときは
List
を使いましょう。
それでも、HashSet
は「一意なデータ管理」をしたい初心者には非常に心強い型です。重複のないデータを扱いたいときは、まずHashSet
を思い出してみましょう。