簡體   English   中英

使用C#在區分大小寫的字典中不區分大小寫地搜索

[英]Searching case insensitively in case sensitive dictionary using c#

我有一本區分大小寫的字典(非常大)。 我想使用忽略大小寫(不區分大小寫)搜索此詞典的鍵。 我不想使用foreach遍歷此字典並比較每個值,因為字典包含太多數據。

有沒有更好的(最有效的)方法來使用C#做到這一點? 我想要一些建議。

因此,如果我對它的理解正確,那么您需要一個字典,該字典按原樣保存字符串,但是以不區分大小寫的方式散列,這樣無論大小寫,您仍然可以在O(1)攤銷時間內進行搜索?

我看到它的方式,你需要通過一個自定義IEqualityComparer創建時Dictionary此構造和實施時IEqualityComparer治療字符串,就好像它們是例如全部大寫或小寫和相同的散列碼(即返回的哈希碼的字符串變為大寫)。

例如:

class MyComparer : IEqualityComparer<string>
{
    public bool Equals(string x, string y)
    {
        return x.ToUpper() == y.ToUpper();
    }

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

...

Dictionary<String, String> dict = new Dictionary<string, string>(new MyComparer());

現在,實際上您的字典通常可以正常保存字符串,但是在搜索或添加時,它們會將它們視為大寫,因此將“ AbcD”與“ aBCd”(都稱為“ ABCD”)相同。

都鐸王朝的答案是一個很好的答案,我想建議您使用StringComparer.CurrentCultureIgnoreCase而不是創建自己的比較器類(特別是如果預期結果相同)來補充它。

范例:

Dictionary<string, string> openWith = 
                  new Dictionary<string, string>( 
                      StringComparer.CurrentCultureIgnoreCase);

來源: http : //msdn.microsoft.com/en-us/library/ms132072.aspx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM