4

我有一个字符串被分成一个整数数组。该数组的大小可以是 1 项,最多 100,000 项(或更大)。顺序并不重要。

目标是稍后使用该对象来确定该值是否存在。一个单独的循环将针对该对象进行测试以查看该项目是否存在(循环将迭代超过testmeInt数组中的项目数)。

方式一:数组

尝试选择整数,捕获错误

方式2:字典

var testme = "12,23".Split(',');
int[] testmeInt = Array.ConvertAll<string, int>(testme, int.Parse);
Dictionary<int, int> TestMeDict = new Dictionary<int, int>();

foreach (int item in testmeInt)
{
    TestMeDict.Add(item, 0);
}


for (int i = 1; i <= 50000000; i++)
{
    if (TestMeDict.ContainsKey(i) == true) {  
        //It Exists
    }
}

我的猜测是使用 Dictionary 的 Way2 将是最快的。这个问题与我的类似,但不涵盖我的确切用例。

4

2 回答 2

1

假设这些值是唯一的,那么由于哈希查找,字典通常是检查集合中是否存在项目的最快方法。

整个存储项(值)不需要直接相等性检查,只需键即可,这在引擎盖下由字典作为哈希处理。


正如 Jon Skeet 所提到的,如果您只是存储整数并且不需要直接基于键的查找,那么 HashSet 是一种更好的方法。

于 2013-04-04T21:03:58.267 回答
1

谢谢大家的提示。研究 HashSet 我遇到了下面的帖子,它直接回答了我的问题。

根据我的技术要求,HashSet 就是答案。但是,下面博客中的性能测试表明,我的 Way 2 Dictionary.Key 方法与 Hashset (0 ms) 具有相同的性能。

http://theburningmonk.com/2011/03/hashset-vs-list-vs-dictionary/

HashSet<T> 与 Dictionary<K, V> wrt 搜索时间以查找项目是否存在

于 2013-04-05T03:41:23.313 回答