根据LINQ中的条件获取连续的值链

时间:2016-06-24 07:09:13

标签: c# linq

说我有List个数字:

var list = new List<int>{100, 1, 2, 4, 10, 11, 50, 54};

我希望输出是满足&#34; closeness&#34;条件的数字集合。与其相邻的值。

例如,如果我将相邻数字之间的距离定义为小于5,我会得到类似的结果:

Set1: {100}
Set2: {1, 2, 4}
Set3: {10, 11}
Set4: {50, 54}

由于每组中的数字都在其相邻值的5之内。

我如何在LINQ中执行此操作?我在考虑Aggregate()TakeWhile()的某种组合,但我无法弄明白。

要清楚,我正在寻找一种解决此问题的通用方法(即如果我将5更改为任何其他数字的算法也会给出满足新条件的集合的输出。)

1 个答案:

答案 0 :(得分:3)

我确定有更好的方法,因为你想用Linq来做这件事,你可以这样做。

int gid=0, prevvalue = list[0];
va result =  list.Select(x=>
    {
        var obj =  Math.Abs(prevvalue-x)>=10? 
                     new {gid= ++gid, item =x} 
                    :new {gid= gid, item =x};
        prevvalue= x;           
        return obj;
    })
    .GroupBy(x=>x.gid)
    .Select(x=>x.Select(s=>s.item).ToList())
    .ToArray();

选中此Demo