私のアプリケーションは、いくつかのテキストが構文解析を処理し、データベースを減らすために固有名詞キャッシュを使用しています呼び出します。C#辞書キーのルックアップにInvariantCultureの方法で
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)
{
//
}
}
問題は別の方法で文字列のデータベースとC#の御馳走平等です2014
1)データベース(SQL Serverなど)
Column_name Type Collation
Word nvarchar Latin1_General_100_CS_AS
:ので、私は似た単語の重複キーエラー(SQL)に実行することができます
Saevarsson
とSævarsson
は、データベースの観点から、同じものであり、文字を含む単語はAEが解析されたテキストでは非常に稀であるので、それは、私にとっては結構です:
select * from dict.ProperNoun where Word = N'Saevarsson' -- returns both Saevarsson and Sævarsson
2)C#
string s1 = "Sævarsson";
string s2 = "Saevarsson";
bool equals = s1.Equals(s2, StringComparison.InvariantCulture);
InvariantCultureの方法で比較が行われた場合、s1とs2は等しいと見なされます。
質問:checする方法はありますかInvariantCultureの方法で文字列キーの存在を確認するには?可能であれば、私のO(1)キーの存在をチェックする複雑さを解消したくありません。私が試してみました
もの:
a)のデータベースチェック - キャッシュミスのため、キャッシュに挿入する前には、また、DBに確認してください。クエリの多くを生成し、そのパフォーマンスはひどいです
b)の文字列の正規化からthis oneに似たマップを使用して「ノーマル」なものとの望ましくない文字を置換。多くの作業が必要で、StringComparison.InvariantCulture
がこれに対処する方法を知っているので、自動化できると感じています。
ありがとうございました。あなたは辞書を初期化すると
新しい辞書を作成し、 'StringComparer.InvariantCulture'をコンストラクタに渡すことができます... O(1) –