【发布时间】:2012-09-01 09:46:42
【问题描述】:
我猜它不会,但如果有人可以确认的话。
如果我尝试使两个集合相交: A(100 万件) B(1 项)
框架是否总是执行 A.Contains(B) 一次,而不是 B.Contains(A) 一百万次?
这是假设相交在底层是如何工作的,这与我不知道的一些奇特算法相反。
更新:
好的,所以对于 c#,如果 B Intersect() 是在 IEnumerable 上定义的,那么对于 c# 你应该清楚地执行 B.InsersectWith(A),并且根据下面的答案(和 MSDN)效率会低很多。因此,如果您使用最好的工具,即IntersectWith(),那么顺序确实很重要。
【问题讨论】:
-
更新:好的,所以我忘了提到这是一个 .NET 问题。放松:-)
-
如果您正在寻找单个项目,为什么要相交?
-
是的,我问它是哪种语言。 30分钟后没有得到回复,然后删除了我的评论。由于
algorithm标签,你的问题没有多大意义。看看答案。现在可以了。 -
你说的是
Enumerable<T>.Intersect还是HashSet<T>.IntersectWith? -
Blam:单项是展示集合之间不平衡的最极端情况的示例。 @CodesInChaos 我问的是 Intersect,但如果其底层算法不同,则可以轻松使用 IntersectWith。
标签: .net algorithm collections intersection hashset