以不变文化方式查找C#字典键
我的应用程序处理一些文本解析,并使用专有名词缓存来减少数据库调用:以不变文化方式查找C#字典键,c#,dictionary,string-comparison,invariantculture,C#,Dictionary,String Comparison,Invariantculture,我的应用程序处理一些文本解析,并使用专有名词缓存来减少数据库调用: Dictionary<String, ProperNoun> ProperNounsDict; if (!ProperNounsDict.ContainsKey(word)) { var newProper = new ProperNoun() { Word = word }; ProperNounsDict.Add(word, newProper); UnitOfWork.Proper
Dictionary<String, ProperNoun> ProperNounsDict;
if (!ProperNounsDict.ContainsKey(word))
{
var newProper = new ProperNoun() { Word = word };
ProperNounsDict.Add(word, newProper);
UnitOfWork.ProperNounRepository.Insert(newProper);
try
{
UnitOfWork.SaveChangesEx();
}
catch (Exception ex)
{
//
}
}
Saevarsson
和Sævarsson
从数据库的角度来看是一样的,这对我来说很好,因为包含字符的单词在解析文本中非常罕见:
select * from dict.ProperNoun where Word = N'Saevarsson' -- returns both Saevarsson and Sævarsson
2)C#
如果以不变的方式进行比较,则s1和s2被视为相等
问题:有没有一种方法可以以不变量区域性的方式检查字符串键的存在?如果可能的话,我不想失去检查键存在的O(1)复杂性
我尝试过的事情:
a)数据库检查-对于缓存未命中,在插入缓存之前,还要检查数据库。生成大量查询,因此性能非常糟糕
b)字符串规范化-使用类似的映射将不需要的字符替换为“正常”字符。需要大量的工作,我觉得它可以自动化,因为StringComparison.InvariantCulture
知道如何处理这个问题
谢谢。初始化词典时,可以将构造函数用于:
字典属性名称信息=
新词典(StringComparer.InvariantCulture);
在这种情况下,将使用不变区域性比较密钥。根据您的需要,您也可以使用其他构造函数。初始化词典时,您可以使用以下构造函数:
字典属性名称信息=
新词典(StringComparer.InvariantCulture);
在这种情况下,将使用不变区域性比较密钥。您也可以根据需要使用其他构造函数。使用此构造函数创建字典
Dictionary<String, ProperNoun> ProperNounsDict = new Dictionary<String, ProperNoun>(StringComparer.InvariantCulture);
Dictionary ProperNounsDict=新字典(StringComparer.InvariantCulture);
使用此构造函数创建字典
Dictionary<String, ProperNoun> ProperNounsDict = new Dictionary<String, ProperNoun>(StringComparer.InvariantCulture);
Dictionary ProperNounsDict=新字典(StringComparer.InvariantCulture);
您可以创建新字典并将StringComparer.InvariantCulture
传递给构造函数。。。这将是O(1)您可以创建新字典并将StringComparer.InvariantCulture
传递给构造函数。。。将是O(1)是。这正是我所需要的。在我的例子中,初始化是从数据库中完成的:UnitOfWork.ProperNounRepository.AllNoTracking.ToDictionary(pn=>pn.Word,pn=>pn,StringComparer.InvariantCulture))代码>。谢谢,是的。这正是我所需要的。在我的例子中,初始化是从数据库中完成的:UnitOfWork.ProperNounRepository.AllNoTracking.ToDictionary(pn=>pn.Word,pn=>pn,StringComparer.InvariantCulture))代码>。非常感谢。
Dictionary<String, ProperNoun> ProperNounsDict =
new Dictionary<String, ProperNoun>(StringComparer.InvariantCulture);
Dictionary<String, ProperNoun> ProperNounsDict = new Dictionary<String, ProperNoun>(StringComparer.InvariantCulture);