71

HashSet<string>.Contains()大文字と小文字を区別しないモードでメソッドを使用するには?

4

4 に答える 4

122

HashSetカスタム比較子を使用して を作成できます。

HashSet<string> hs = new HashSet<string>(StringComparer.OrdinalIgnoreCase);

hs.Add("Hello");

Console.WriteLine(hs.Contains("HeLLo"));
于 2010-04-19T13:19:37.427 に答える
10

あなたは右でそれを作成する必要がありますIEqualityComparer:

HashSet<string> hashset = new HashSet<string>(StringComparer.InvariantCultureIgnoreCase);
于 2010-04-19T13:19:21.123 に答える
6

他の回答が示しているように、ここでは必要ありませんが、文字列を使用していない場合は、実装することを選択してからIEqualityComparer<T>、オーバーロードを使用できます.Contains。これは文字列を使用した例です(繰り返しますが、他の回答は、ニーズを満たす使用できる文字列比較子がすでにあることを示しています)。周囲の多くのメソッドにIEnumerable<T>は、そのような比較子を受け入れるオーバーロードがあるため、それらの実装方法を学ぶことをお勧めします。

class CustomStringComparer : IEqualityComparer<string>
{
    public bool Equals(string x, string y)
    {
        return x.Equals(y, StringComparison.InvariantCultureIgnoreCase);
    }

    public int GetHashCode(string obj)
    {
        return obj.GetHashCode();
    }
}

そして、それを使用してください

bool contains = hash.Contains("foo", new CustomStringComparer());
于 2010-04-19T13:21:52.347 に答える
5

使用する を指定できるコンストラクターIEqualityComparerを使用する必要があります。

HashSet<String> hashSet = new HashSet<String>(StringComparer.InvariantCultureIgnoreCase);

StringComparerオブジェクトは、よく使用されるいくつかの比較子を静的プロパティとして提供します。

于 2010-04-19T13:20:31.123 に答える