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

约翰·谭

假设我有一个List数字:

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

而且我希望输出是一组数字,这些数字应满足其相邻值与“接近度”的条件。

因此,例如,如果我将相邻数字之间的距离定义为小于5,则将得到类似以下内容的结果:

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

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

我将如何在LINQ中做到这一点?我在想的一些组合Aggregate()TakeWhile(),但我无法弄清楚。

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

哈里·普拉萨德(Hari Prasad)

我敢肯定有更好的方法,因为您想这样做,就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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章