C#のHashSetとは?配列から重複要素を削除する方法を解説
C#のHashSetは、配列やコレクションに含まれる重複した文字列や要素を自動的に取り除くことができる、最適化されたセットコレクションです。HashSetは内部的にハッシュテーブルを使用しており、要素の追加・検索・削除が高速に行えるのが特徴です。
この記事では、C#のHashSetを使って、配列内の重複する文字列を削除する方法を具体的なコード例とともに解説します。
HashSetを使った重複削除の例
以下の例では、同じ単語が複数回含まれる文字列配列を用意し、HashSetに変換することで重複を排除しています。
using System;
using System.Collections.Generic;
using System.Linq;
class Program {
static void Main() {
string[] arr1 = {
"bus",
"truck",
"bus",
"car",
"truck"
};
Console.WriteLine(string.Join(",", arr1));
// 配列からHashSetを作成(重複は自動的に除外される)
var h = new HashSet<string>(arr1);
// 重複が削除された要素を配列として取得
string[] arr2 = h.ToArray();
Console.WriteLine(string.Join(",", arr2));
}
}
実行結果
bus,truck,bus,car,truck bus,truck,car
元の配列には「bus」と「truck」がそれぞれ2回ずつ含まれていましたが、出力結果を見ると、各単語が1回だけ表示されていることがわかります。HashSetに要素を追加する際、すでに存在する値は自動的に無視されるため、明示的な重複チェックのコードを書く必要がありません。
HashSetの宣言方法
配列からHashSetを宣言して作成するには、次のように記述します。
var h = new HashSet<string>(arr1);
コンストラクタに配列を渡すだけで、初期化時にすべての要素が登録され、この時点で重複が排除されます。
重複を削除した配列を取得する
HashSetの内容を再び配列として取り出すには、ToArray()メソッドを使用します。
string[] arr2 = h.ToArray();
これにより、重複のない新しい配列「arr2」が生成されます。
HashSetの主な特徴
- 重複なし: 同じ要素は1つしか保持されません。
- 高速な操作: 要素の追加・削除・検索がほぼO(1)の計算量で行えます。
- 順序は保証されない: 要素の並び順は保持されないため、順序が必要な場合はListなど別のコレクションを検討しましょう。
- Contains()による存在確認: 特定の要素が含まれているかを高速に判定できます。
このように、C#のHashSetは重複除去をはじめ、集合演算(和集合・積集合・差集合など)にも活用できる便利なコレクションです。データの一意性を確保したい場面でぜひ活用してください。
-
C++で二分木の重複する部分木を検出する方法
問題の概要二分木が与えられたとき、その中に存在する重複する部分木(duplicate subtrees)をすべて見つける問題を考えてみましょう。ここでいう「重複」とは、構造とノードの値が完全に一致する部分木が2つ以上存在することを意味します。各種類の重複部分木について、代表としてどれか1つの根ノードを返せばよいことになっています。たとえば、次のような二分木があるとします。この木に含まれる重複する部分木は、以下の2つです。値 4 を持つ単一ノードの部分木(2か所に出現)根が 2 で、子に 4 を持つ部分木(2か所に出現)解法のアプローチ:部分木のシリアライズこの問題を効率的に解く鍵となるのは、部
-
重複ファイルの削除方法|PCの空き容量を増やして動作を高速化する完全ガイド
パソコンを整理整頓することは、高速で安定した状態を保つために非常に重要です。そのため、Windowsユーザーなら誰もが、ディスククリーンアップ、デフラグ、レジストリの修復、ウイルススキャンといった定期的なメンテナンス作業を行う必要があります。しかし、意外と見落とされがちな重要なメンテナンス作業がもう一つあります。それが「重複ファイルの削除」です。 重複ファイルとは? どのパソコンにも重複ファイルは存在します。文書、音楽、画像、動画などのコピーのことです。これらのファイルは時間とともに蓄積し、PCの中を散らかしていきます。その結果、空きディスク容量が減少し、ファイルやフォルダが乱雑になってしま