返回满足条件

时间:2016-07-20 20:01:00

标签: c# linq

我有两个列有(x, y)个数据点的列表;其中一个列表是主列表,另一个列表是我要比较的列表。

例如,在 main 列表中,我尝试在数据中找到“空白”;我说我正在查看两个x数据点x1 = 21x2 = 24。这两点之间的差异大于deltaX = 1。所以我想做的是查看第二个列表,找到x1 = 21x2 = 24之间的所有数据点以“填补空白”。

我有这样的事情:

double diffX = Math.Abs(datapoints1[i + 1].X - datapoints1[i].X);

if (diffX > deltaX)
{
    datapoints1.AddRange(LookBetween(datapoints1[i + 1].X, datapoints1[i].X);
}
.
.
.
private IEnumerable<PointXY> LookBetween(double upperLimit, double lowerLimit)
{
    return datapoints2.Where(x => x.X < upperLimit && x.X > lowerLimit);
}

LookBetween似乎返回一个布尔值,因为没有任何内容被添加到主列表中。如何根据x, y的差距返回符合条件的x值列表?

1 个答案:

答案 0 :(得分:1)

好像你正试图通过datapoints1中的邻居来pairwise iteration

使用上面链接的功能,您可能会有以下内容:

var pairs = datapoints1.Pairwise((d1, d2) => new
{
    x1 = d1.X,
    x2 = d2.X, 
    diffX = Math.Abs(d1.X - d2.X),
});
var gaps = from pair in pairs
           where pair.diffX > deltaX
           from dp2 in datapoints2
           where pair.x1 < dp2.X && dp2.X < pair.x2
           select dp2;

或使用您的LookBetween功能...

var gaps = from pair in pairs
           where pair.diffX > deltaX
           from dp2 in LookBetween(pair.x2, pair.x1)
           select dp2;