#はじめに
C#には重複したオブジェクトを追加できないリストクラスがある。
「HashSet」と呼ばれるクラスで、使いどころによっては非常に便利である。
通常のListクラスと似たような感覚で使えるので、マスターする価値は大いにある。
#HashSetクラスの特徴
・重複したオブジェクトを追加できない(全ての値がユニークでなければならない)
→重複チェックの手間が省ける
・順序がないため配列の順番が不安定
#HashSetクラスの使い方
using System.Collections.Generic;
ジェネリックコレクションを必ずusingする。
var list = new HashSet<string>();
string list = new HashSet<string>();
Listと同じように、変数にインスタンス化したクラスを代入して使用する。
#HashSetへの要素のセット
//初期値のセット
var list = new HashSet<string>() { "りんご", "みかん", "ぶどう" };
//Addメソッドで要素を追加
list.Add("メロン");
//要素の取り出し
foreach (var item in list)
{
Console.WriteLine(item); //りんご みかん ぶどう メロン
}
#同じ要素がすでに存在している場合、要素をセットできない
var list = new HashSet<string>() { "りんご", "みかん", "ぶどう" };
//Addメソッドで「りんご」を追加
list.Add("りんご");
//要素の取り出し
foreach (var item in list)
{
//「りんご」はすでに存在しているので末尾に新しく追加はできない
Console.WriteLine(item); //りんご みかん ぶどう
}
#指定した要素があるかを確認する
var list = new HashSet<string>() { "りんご", "みかん", "ぶどう" };
//Containsメソッドで指定した要素があるかを確認する
foreach (var item in list)
{
//「りんご」がリストにあるかどうかチェック。あればTrue、なければFalseを返す
Console.WriteLine(list.Contains("りんご"); //True
}
#指定した要素を削除する
var list = new HashSet<string>() { "りんご", "みかん", "ぶどう" };
//Removeメソッドで指定した要素を削除する
list.Remove("りんご");
foreach (var item in list)
{
//「りんご」がリストから削除されていることがわかる
Console.WriteLine(item); //みかん ぶどう
}
#要素数を取得する
var list = new HashSet<string>() { "りんご", "みかん", "ぶどう" };
//Countメソッドで要素数を取得
Console.WriteLine(list.Count()); //3
#要素を全て削除する
var list = new HashSet<string>() { "りんご", "みかん", "ぶどう" };
//Clearメソッドでリスト内の全要素を削除
list.Clear();
Console.WriteLine(list.Count()); //0