说我有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更改为任何其他数字的算法也会给出满足新条件的集合的输出。)
答案 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