我在面试 (C# 3.0) 时被要求提供从列表中删除项目列表的逻辑。
我回复了
int[] items={1,2,3,4};
List<int> newList = new List<int>() { 1, 2, 3, 4, 5, 56, 788, 9 };
newList.RemoveAll((int i) => { return items.Contains(i); });
1)面试官说我用的算法随着items的增长会逐渐耗时,让我给一个更好更快的算法。什么是高效的算法?
2) 我如何使用 LINQ 实现相同的目的?
3)他让我提供一个Two-Way-Closure的例子? (一般我知道关闭, 什么是Two-Way-Closure?,我回答没有这个词存在,但他没有 满足)。
最佳答案
编辑 更好的解决方案:使用 Except
它不是对称的,与 Intersect
不同。
1 和 2:您可以使用 Intersect
扩展方法来做到这一点。 但是,如果您的第二个数组包含在第一个数组中找不到的元素,那么这些元素将出现在结果列表中:Intersect
对称工作。
至于“双向关闭”,我从未听说过这个术语,我很怀疑它是一个既定的技术术语。
关于C#改进算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1758375/