C#改进算法

标签 c# generics

我在面试 (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/

相关文章:

c# - 如何使用 C# 查找下一个空白行并将表单数据导出到 Excel

c# - C# 通用方法的最佳实现,需要根据传入的类类型来定位不同的属性

Java 列表与 ArrayList

scala:实现一个通用的递归 max 函数

java - 没有参数的参数化类?

c# - "ESRI.ArcGIS.DataSourcesGDB.FileGDBWorkspaceFactoryClass"无法嵌入

c# - 为什么 ReadAsStringAsync 是异步的?

java - 通用容器工厂

java - 关于泛型函数的泛型错误语法 Java 1.7

c# - 在 Nest 5.5.0 中为属性设置 not_analyzed