カテゴリ: C# 更新日: 2025/06/27

C#の集合型(HashSet型)とは?重複しないデータ管理の基本と活用法

C#の集合型(HashSet型)とは?重複しないデータ管理の基本と活用法
C#の集合型(HashSet型)とは?重複しないデータ管理の基本と活用法

先生と生徒の会話形式で理解しよう

生徒

「C#で、同じデータを何回も入れずに管理したいんですが、どうすればいいですか?」

先生

「その場合は、HashSetという集合型を使うのがおすすめです。重複したデータを自動的に除外してくれますよ。」

生徒

「それって、どうやって使うんですか?配列とかリストとは違うんですか?」

先生

「はい、ちょっと違います。では、C#のHashSet型について、基本から詳しく見ていきましょう!」

1. HashSet型とは?重複しないデータを管理できるC#の便利な型

1. HashSet型とは?重複しないデータを管理できるC#の便利な型
1. HashSet型とは?重複しないデータを管理できるC#の便利な型

HashSet(ハッシュセット)は、C#で使える集合型の一種です。「集合」とは、数学の授業で出てきた「同じものを2つ以上入れない箱」のようなものだと考えてください。HashSet型を使うと、同じデータを何度追加しても、1つだけしか保存されません。

たとえば、果物の名前をリストに入れたいとき、「りんご」「バナナ」「りんご」と2回「りんご」を追加しても、HashSetでは1つの「りんご」しか保存されません。

2. なぜHashSet型が便利なの?

2. なぜHashSet型が便利なの?
2. なぜHashSet型が便利なの?

重複を許さないという特徴のおかげで、次のような場面で役立ちます。

  • 重複したデータを自動で省きたいとき
  • すばやく「このデータが入っているか?」を調べたいとき
  • 大量のデータを扱うときに、処理を速くしたいとき

また、HashSetはデータの順番を気にしないので、「順番はいらないけど、同じものは入れたくない!」という時に最適です。

3. 実際にHashSetを使ってみよう

3. 実際に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メソッドの基本

4. AddメソッドとContainsメソッドの基本
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. リストとの違いとは?初心者でも理解できる比較

5. リストとの違いとは?初心者でも理解できる比較
5. リストとの違いとは?初心者でも理解できる比較

List型とHashSet型の違いが分かりづらいかもしれません。そこで、ポイントをまとめてみましょう。

  • List型:順番を大切にしたいときに使う。重複もOK。
  • HashSet型:順番は気にせず、重複を避けたいときに使う。

たとえば、ユーザーが選んだ項目を記録するとき、何度同じ選択をしても1回だけ記録したいなら、HashSetがぴったりです。

6. 応用:重複のあるリストから一意な値を取り出す

6. 応用:重複のあるリストから一意な値を取り出す
6. 応用:重複のあるリストから一意な値を取り出す

実際の場面では、Listにデータを集めたあと、「重複を除きたい」と思うこともあります。そんなときも、HashSetは便利です。


List<string> names = new List<string>() 
{ 
    "田中", "佐藤", "田中", "鈴木" 
};

HashSet<string> uniqueNames = new HashSet<string>(names);

foreach (string name in uniqueNames)
{
    Console.WriteLine(name);
}

田中
佐藤
鈴木

HashSetListのデータをそのまま渡すだけで、重複を自動的に除去できます。

7. 追加・削除・クリアの基本操作

7. 追加・削除・クリアの基本操作
7. 追加・削除・クリアの基本操作

HashSetでは、以下のような基本操作が簡単にできます。

  • Add:データを追加する
  • Remove:特定のデータを削除する
  • Clear:すべてのデータを削除する

HashSet<string> animals = new HashSet<string>();
animals.Add("ねこ");
animals.Add("いぬ");
animals.Remove("ねこ"); // 「ねこ」を削除
animals.Clear();        // 全て削除

これらを組み合わせることで、柔軟にデータを扱うことができます。

8. 注意点とまとめのポイント

8. 注意点とまとめのポイント
8. 注意点とまとめのポイント

HashSetにはいくつかの注意点もあります。

  • 順番は保証されない:表示される順序は毎回変わることがあります。
  • データの重複は許されない:あえて同じデータを2つ以上入れたいときはListを使いましょう。

それでも、HashSetは「一意なデータ管理」をしたい初心者には非常に心強い型です。重複のないデータを扱いたいときは、まずHashSetを思い出してみましょう。

カテゴリの一覧へ
新着記事
COBOLの変数名の付け方を解説!初心者でもわかる命名規則とコツ
C#のbreakとcontinueの使い方!ループ制御の基本テクニック
COBOLのFILLERの使い方とは?未使用領域を上手に管理する基本テクニック
C#のforeach文の基本!配列やコレクションを簡単に繰り返し処理する方法
人気記事
No.1
Java&Spring記事人気No1
C#のwhile文の使い方!条件付きループを基礎から学ぼう
No.2
Java&Spring記事人気No2
COBOLのDISPLAY文の使い方を完全ガイド!初心者でもわかる出力方法
No.3
Java&Spring記事人気No3
C#で型を調べる方法!GetType()・typeof演算子の違いと使い方
No.4
Java&Spring記事人気No4
COBOLのINDEXED BY句を使ったインデックス管理の基本をやさしく解説!