2012-01-27 40 views
1

我有一個HashSet<string>使用StringComparer.CurrentCultureIgnoreCase實例化,我正在廣泛使用.Contains(字符串輸入)來檢查用戶輸入。如果用戶在錯誤的情況下輸入一個值,.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/zh-cn/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 2012-01-27 17:09:54

+0

優雅,永遠不會想到這一點。但有沒有辦法做到這一點,而不必改變我的對象?否則,把Linq方法放在「最好的方式」之下(也許更多/太昂貴),使用哈希集來做?編輯:似乎其他答案已經vamoosed ... – downwitch 2012-01-27 17:18:11