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