看看这个:
var query = myDic.Select(x => x.Key).Except(myHashSet);
或
var query = myDic.Select(x => x.Key).where(y=>!myHashSet.Contains(y))
我想在第一种情况下由于多态性将调用Contains
的O(1)版本。
但不知道except
。
更新
在我的情况下,Exept也是O(1)。
答案 0 :(得分:0)
var query = myDic.Select(x => x.Key).Except(myHashSet);
Except将是IEnumerable的扩展名(Select的结果)。这是不 O(1)
myHashSet.Contains(y)的 确实在调用成员函数,即O(n)
考虑
new HashSet<K>(myDic.Select(x => x.Key)).ExceptWith(myHashSet);
另请参阅HashSet&lt;&gt; .SymmetricExceptWith()
答案 1 :(得分:0)
如果您的myDic
是普通的.NET词典,那么我会选择
myDic.Keys.Except(myHashSet)
以提高可读性。
要说出您的选择,第一个是O(n + m),而第二个是O(n),这两个都不能告诉您哪个集合最先完成。如有疑问,两匹马都要比赛。
@sehe的答案也是O(n + m),但很可能比您的O(n + m)解决方案要快。