c#.net Compact Framework 3.5中最快的字典查找

时间:2011-04-12 14:40:23

标签: c# .net dictionary compact-framework lookup

我正在寻找最快的方法来查找List,Set,Dictionary是否包含特定的关键字(字符串)。我不需要存储任何数据,我只想知道我的关键字是否在列表中。

我想到了一些可能性:

Dictionary<string, bool> myDictionary = new Dictionary<string, bool>();
if (myDictionary.ContainsKey(valueToSearch))
{
    // do something
}

但我不需要值。

string[] myArray = {"key1", "key2", "key3"}
if (Array.IndexOf(myArray, valueToSearch) != -1)
{
    // do something
}

然后我发现:

List<string> list = new List<string>();
if (list.Contains(valueToSearch))    
{
    // do something
}

查找将经常发生,并且必须非常快。 知道检查某个值是否等于某个给定键列表的最快方法是什么?

3 个答案:

答案 0 :(得分:8)

在标准集合类型中,Dictionary将是最快的,因为我认为您在紧凑框架中没有HashSet<T>。另外两个进行顺序搜索。

答案 1 :(得分:2)

通常,字典查找是这类问题的常用解决方案,只要您的密钥是良好的哈希值,在字典的查找表中得到一些均匀的分布。

但是,在某些情况下,列表查找似乎运行得更快,具体取决于数据的排序方式以及您正在查找的内容。

最好的方法是运行每个案例的个人资料,看看哪个表现更好。

答案 2 :(得分:0)

我同意安迪的观点。您还可以查看SortedList它本质上是一个按其键排序的字典。如果它已经排序,应该更快地搜索...