我有以下两个列表,它们是成对的字符串。一个是我所期望的,另一个是我发现的。我想找出缺少的东西。该代码有效,但有些情况比其他情况慢得多。
- 当 n = 1 时,调用需要 21 秒
.Except()
。 - 当 n = 10 时,调用需要 2 秒
.Except()
。
在这两种情况下,它是相同数量的元素。这只是一些哈希表冲突吗?我能做些什么来使所有案件都同样快速?
List<KeyValuePair<string, string>> FoundItems = new List<KeyValuePair<string, string>>();
List<KeyValuePair<string, string>> ExpectedItems = new List<KeyValuePair<string, string>>();
int n = 1;
for (int k1 = 0; k1 < n; k1 ++)
{
for (int k2 = 0; k2 < 3500/n; k2++)
{
ExpectedItems.Add(new KeyValuePair<string, string>( k1.ToString(), k2.ToString()));
if (k2 != 0)
{
FoundItems.Add(new KeyValuePair<string, string>(k1.ToString(), k2.ToString()));
}
}
}
Stopwatch sw = new Stopwatch();
sw.Start();
//!!!! This is the slow line.
List<KeyValuePair<string, string>> MissingItems = ExpectedItems.Except(FoundItems).ToList();
//!!!!
string MatchingTime = "Matching Time: " + sw.ElapsedMilliseconds.ToString() + " (" + sw.ElapsedMilliseconds / 1000 + " sec)";
MessageBox.Show(MatchingTime + ", " + ExpectedItems.Count() + " items");
我的数据确实是字符串,我在这个测试用例中只使用整数,因为它很简单。