【发布时间】:2019-04-15 10:34:41
【问题描述】:
有没有办法优化以下 LINQ 查询?当数组很大时效率不高。
public class Test
{
public int Id { get; set; }
}
public static Test[] GetObjects(Test[] t, int[] ids)
{
return t.Where(q => ids.Contains(q.Id)).ToArray();
}
【问题讨论】:
-
您是实际上遇到性能问题还是只是猜测?我不认为你能比 O(n^2) 做得更好。你可以尝试将
Tests 存储在字典中,使用它们的 ID 作为键,我猜... -
ids必须是一个数组吗?例如,如果您可以将ids更改为HashSet<int>,效率会高得多。注意:我不建议做类似var hash = new HashSet<int>(ids);inside 的方法 - 它应该在 outside 方法和相同的哈希值之后完成在数组将被使用的相同地方重用。或者,正如@Sweeper 所说:Dictionary<int, Test>由 id 键入 - 再次重复使用,而不是每次都计算 -
当您执行 ToArray() 时,您实际上是在与列表中的所有元素进行交互,即使您还不需要。您可以使用 IEnumerable
并且在您真正需要时进行查询。
标签: c# linq optimization query-optimization contains