C#搜索范围内的值

时间:2017-02-21 18:10:55

标签: c# linq

我有一系列复杂类型,我们称之为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的第一个元素处停止}}。我怎么能这样做?

1 个答案:

答案 0 :(得分:2)

首先尝试对列表进行排序,然后在列表上进行二进制搜索,以找到min和max的索引

然后你可以做

.Skip(minIndex).Take(maxIndex - minIndex + 1)

或者,如果你想要它简单而不是速度那么

.SkipWhile(x=>x <= minX).TakeWhile(x=>x < maxX)