我有一系列复杂类型,我们称之为Point
(见下文),我想查找给定X值[minX, maxX]
范围内的所有点。我需要进行数百万次搜索。我怎样才能以最快的方式做到这一点?
public class Point {
public double X { get; set; };
public double Y { get; set; };
}
Point[] data;
我只能使用data.Where(c => c.X > minX && c.x < maxX)
进行搜索,但这太慢了。
请注意,我可以X
使用data.sort(c => c.X)
apriori对数组进行排序,因此从理论上讲,我可以从大于minX
的第一个元素开始返回一个块,并在大于{{1的第一个元素处停止}}。我怎么能这样做?
答案 0 :(得分:2)
首先尝试对列表进行排序,然后在列表上进行二进制搜索,以找到min和max的索引
然后你可以做
.Skip(minIndex).Take(maxIndex - minIndex + 1)
或者,如果你想要它简单而不是速度那么
.SkipWhile(x=>x <= minX).TakeWhile(x=>x < maxX)