HashSetのコンストラクタで適切なIEqualityComparer<T>インターフェイスを指定することで、要素の等価性比較時の動作をカスタマイズ出来ます。 例えば、比較の際に大文字小文字の違いを無視するようにするといったことが出来ます。 以下は、StringComparerクラスを使って、大文字小文字の違いを無視するHashSetを作成する例です。
StringComparerを指定して大文字小文字の違いを意識する/無視するHashSetを作成する
using System;
using System.Collections.Generic;
class Sample {
static void Main()
{
var names = new[] {"Alice", "Bob", "Charlie", "Dave", "Eve"};
// 大文字小文字の違いを意識するHashSet
var caseSensitiveSet = new HashSet<string>(names, StringComparer.Ordinal);
// 大文字小文字の違いを無視するHashSet
var caseInsensitiveSet = new HashSet<string>(names, StringComparer.OrdinalIgnoreCase);
Console.WriteLine(caseSensitiveSet.IsSupersetOf(new[] {"aLiCe", "BOB", "dave"}));
Console.WriteLine(caseInsensitiveSet.IsSupersetOf(new[] {"aLiCe", "BOB", "dave"}));
}
}
実行結果
False True
IEqualityComparer<T>インターフェイスや実装例については等価性の定義と比較、StringComparerについては文字列と比較オプション・カルチャの並べ替え規則 §.StringComparison列挙型とStringComparerクラスを参照してください。
SortedSetでは等価性比較だけではなく大小関係の比較も行うため、IEqualityComparer<T>インターフェイスではなくIComparer<T>インターフェイスを要求します。