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

您可以引入附加字典,其中键是原始字典中的值,值是原始字典中这些值的计数。如果原始字典中的值是唯一的(因此计数始终为 1),那么您可以使用HashSet而不是Dictionary.

您需要确保两个结构始终保持同步。

于 2012-07-06T08:38:17.690 回答