所以,我只选择LINQ查询中的一个元素(cars
类型为Car[]
):
Car selectedCar = (
from x
in cars
where x.Location * direction > location * direction
orderby x.Location * direction
select x)
.FirstOrDefault();
这基本上是一个O(n log n)操作(因为orderby
)。我可以通过使用LINQ来降低约30%的性能,但是当它很容易成为带有循环的O(n)时,我不能将其设为O(n log n)。有没有办法保留LINQ,但减少了操作顺序?
答案 0 :(得分:5)
Aggregate应该这样做:
Car selectedCar = cars
.Where(x => x.Location * direction > location * direction)
.Aggregate((a, b) => (a.Location * direction < b.Location * direction) ? a : b);
我没有检查这段代码是否真的有用,所以要小心。
答案 1 :(得分:-1)
试试这个:
Car selectedCar = cars.Where(x=>x.Location * direction > location * direction).Min(x=>x.Location * direction);