2012-01-27 10 views
1

StringComparer.CurrentCultureIgnoreCaseを使用してインスタンス化され、ユーザー入力を確認するために.Contains(文字列入力)を広範囲に使用しているHashSet<string>があります。ユーザーが間違ったケースで値を入力すると、.Contains = trueとなり、正しいですが、大文字と小文字も修正する必要があります。例えば、ユーザがmyvalueMyValueをハッシュセットに要求すると、MyValueも返す最も効率的な方法は何ですか?ユーザの入力は大文字と小文字が区別されますか?ハッシュセット<string>から正しいケース値を取得するにはどうすればよいですか?

static HashSet<string> testHS = new HashSet<string>(StringComparer.CurrentCulture); 
    static bool InputExists(string input, out string correctedCaseString) 
    { 
     correctedCaseString = input; 
     if (testHS.Contains(input)) 
     { 
      // correctedCaseString = some query result of the cased testHS value? 
      return true; 
     } 
     return false; 
    } 

答えて

3

あなたがHashSetのの代わりに辞書を使用することもできます。

は、ここで私が何を意味するかの大まかなコードサンプルです。文字列からそれ自体にマップし、大文字と小文字を区別しない等価比較(http://msdn.microsoft.com/en-us/library/ms132072.aspx)を使用します。あなたのコードは次のようになります。

static Dictionary<string, string> testD = new Dictionary<string, string>(StringComparer.CurrentCulture); 
static bool InputExists(string input, out string correctedCaseString) 
{ 
    correctedCaseString = input; 
    if (testD.ContainsKey(input)) 
    { 
     correctedCaseString = testD[input]; 
     return true; 
    } 
    return false; 
} 
+1

あなたは私にそれを打つことができます。 – Greg

+0

エレガントで、それは決して考えなかったでしょう。しかし、私のオブジェクトを変更することなくそれを行う方法はありますか?さもなければ、Linqメソッドはハッシュセットを使って "最良の方法"(そして多すぎる/高すぎる)の下にありますか?編集:他の答えがvamoosedされているようだ... – downwitch

関連する問題