我有一个词典A,我想以快速适当的方式找到B中未列出的int
键。
Dictionary<int,object> A;
List<int> B;
我想得到
A KEYS ARE NOT EXISTING IN B
有没有一种快速而优雅的方法?
答案 0 :(得分:5)
您可以尝试将Linq
用于var result = A.Keys.Except(B);
答案 1 :(得分:1)
您可以制作一个new HashSet<int> (A.Keys)
,然后使用哈希集的ExceptWith()
方法。
编辑:
因为您认为哈希会破坏性能,所以这里有一个示例代码,您可以将其放入linqpad。在大多数情况下,这仍然比仅使用LINQ .Except()
Dictionary<int, int> A = new Dictionary<int, int>();
List<int> B = new List<int>();
// test filling...
Random r = new Random();
for (int i = 0; i < 1000000; i++)
{
int rnd = r.Next(0, 2000000);
A[rnd] = rnd;
rnd = r.Next(0, 2000000);
B.Add(rnd);
}
// Get time for LINQ Except
Stopwatch w = Stopwatch.StartNew();
var count = A.Keys.Except(B).Count();
w.Stop();
w.Dump();
count.Dump("Count");
// Get time for Hashset
w = Stopwatch.StartNew();
HashSet<int> ha = new HashSet<int>(A.Keys);
ha.ExceptWith(B);
count = ha.Count;
w.Stop();
w.Dump();
count.Dump("Count");