如何比“foreach”更快地比较DictionaryEntry值。循环

时间:2012-07-06 08:23:39

标签: c#

目前我用它来搜索新字符串并与字典集合进行比较

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

hd包含很多键并且make循环很长。 我可以做些什么来快速检查并且不要等待这么长时间检查字典集合?

感谢您的建议。

3 个答案:

答案 0 :(得分:3)

从根本上说,不是 - 如果您正在尝试按值找到字典条目,那么它将始终是O(N)操作。相反,如果您想要这种行为,则应构建HashSet<T>个值。

(请注意,这些天你真的不应该首先使用非通用集合,除非真的必须这样做。)

答案 1 :(得分:0)

您可以引入其他字典,其中键是原始字典中的值,值是原始字典中这些值的计数。如果原始字典中的值是唯一的(因此计数总是1),那么您可以使用HashSet代替Dictionary

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

答案 2 :(得分:0)

您是否还可以添加代码以显示您使用hdnewWordIn的类型以使示例更清晰?

假设在您的示例中newWordInstring类型,那么当您将其与DictionaryEntry类型进行比较时,该代码将无法编译。

正如Jon Skeet已经指出你可能需要的是HashSet<string>

看起来(从您的代码注释中)您要做的是确保您的集合不包含重复条目。然后你的代码应该是:

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

...

// Only add distinct entries
if (!hd.Contains(newWordIn))
{
    hd.Add(newWordIn);
}