假设我有一个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更改为任何其他数字也将给出满足新条件的集合的输出)。
我敢肯定有更好的方法,因为您想这样做,就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] 删除。
我来说两句