选择两个列表中常见的元素效率更高
本文关键字:常见 元素 效率 列表 两个 选择 | 更新日期: 2023-09-27 18:17:39
如果我有两个列表,我想创建一个新的第三个列表,只有两个列表中的公共元素(where in查询)可以使用以下代码:
var listC = listB.Join(listA, b => b.ObjectAId, a => a.Id, (b, a) => b).ToList();
这种方法的复杂度为0 (n)。
但是,我也可以这样使用select方法:
var lstC = listA.Where(r => listB.Contains(r).ToList();
第二种方式也是O(n) ?
如果两种方法的效率相同,它们之间的区别是什么?
谢谢。
var listC = listA.Intersect(listB); // perhaps a .ToList() on the end
这将使用哈希使其尽可能便宜。
var commonElements = listA.Intersect(listB).ToList();
您可以尝试使用Enumerable。Intersect函数,它取两个列表并将它们转换成一个包含两个列表中所有元素的列表。如果您希望对象的相等性不基于类的引用相等性/默认IEqualityComparer<T>
,则还有一个接受IEqualityComparer<T>
的重载。
你可以这样使用它:
var commonElements = listA.Intersect(listB);
//you can add an IEqualityComparer<T> to the arguments,
//or append .ToList()/.ToArray to make it a list/array.