【发布时间】:2020-01-08 16:00:48
【问题描述】:
我有 2 个对象列表,我想从第一个对象中获取所有对象,其中字符串 a 与第二个列表中的字符串 a 不匹配。
public class ObjectA
{
string Item;
int b;
}
public class ObjectB
{
string Item;
int b;
}
使用 linq 可以通过这种方式轻松完成,但有什么更快的方法呢?
var newList = objectAList.Where(a => !objectBList.Any(b => b.Item == a.Item)).ToList()
【问题讨论】:
-
您的列表大小是多少?另一种方法是使用两个嵌套的 for 语句。但是说这会更快并没有说太多。你应该做一些基准测试。小尺寸列表的行为可能可以忽略不计。对于中型或大型可能不会。什么是小?什么是大?使用所有这些问题,我试图说服您,如果您没有找到解决相同问题的另一种方法然后执行基准测试,那么这没有任何意义。
-
您在寻找更快的方式、非 LINQ 方式还是同样更快的非 LINQ 方式?你有解决这个问题的想法或尝试吗?
-
@Christos 嵌套的语句为 O(n*m)。 Linq 的 except 明显更好。
-
@EricJ。我同意。我的想法是,当您只有一种解决方案时,试图回答哪个更快是没有意义的。即使有两种解决方案,如果您不运行任何基准测试,任何猜测都可能毫无意义。