0

現在、これを使用して新しい文字列を検索し、辞書コレクションと比較します

foreach (DictionaryEntry value in hd)              
{ 
    if (value == newWordIn)
    {
        // assign existing word
    } 
    else 
    {
        // assign new word into collection
    }
}

hd には非常に多くのキーが含まれており、ループが非常に長くなります。チェックを高速化し、チェック辞書の収集をそれほど長く待たないようにするためにできることはありますか?

提案していただきありがとうございます。

4

3 に答える 3

3

基本的に、いいえ-値で辞書エントリを見つけようとしている場合、それは常にO(N)操作になります。HashSet<T>代わりに、この動作が必要な場合は、値を構築する必要があります。

(最近では、本当に必要でない限り、最初から非ジェネリック コレクションを使用するべきではないことに注意してください。)

于 2012-07-06T08:27:26.703 に答える
0

hd使用しているタイプを示しnewWordIn、例をより明確にするためのコードも含めていただけますか?

newWordInあなたの例が型であると仮定すると、stringそのコードは型と比較しているためコンパイルされませんDictionaryEntry

Jon Skeet がすでに指摘しているように、おそらく必要なのはHashSet<string>

あなたがやろうとしていることは、あなたのコレクションに重複したエントリが含まれていないことを確認することです。次に、コードは次のようになります。

HashSet<string> hd = new HashSet<string>();

...

// Only add distinct entries
if (!hd.Contains(newWordIn))
{
    hd.Add(newWordIn);
}
于 2012-07-06T09:15:11.067 に答える
0

キーが元の辞書の値であり、値が元の辞書の値の数である追加の辞書を導入できます。元のディクショナリの値が一意である場合 (つまり、count は常に 1 になります)、HashSet代わりに を使用できますDictionary

2 つの構造が常に同期していることを確認する必要があります。

于 2012-07-06T08:38:17.690 に答える