LINQ(或伪代码)按接近度对项目进行分组

Ste*_*J81 5 c# linq grouping list

有没有人能够启发我如何使用 LINQ(或者在必要时使用更合适的东西)来创建一个整数列表,这些列表按彼此的接近程度分组。

基本上,我想创建数字在任何其他数字的 5 以内的组。

所以,给定:

3 27 53 79 113 129 134 140 141 142 145 174 191 214 284 284
Run Code Online (Sandbox Code Playgroud)

生成以下列表:

3 
27
53
79
113
129 134 
140 141 142 145
174
194
214
284 284
Run Code Online (Sandbox Code Playgroud)

谢谢!

dtb*_*dtb 4

LINQ 不太擅长滚动求和等事情。foreach这里使用简单的循环更好:

static IEnumerable<IEnumerable<int>> GroupByProximity(
    this IEnumerable<int> source, int threshold)
{
    var g = new List<int>();
    foreach (var x in source)
    {
        if ((g.Count != 0) && (x > g[0] + threshold))
        {
            yield return g;
            g = new List<int>();
        }
        g.Add(x);
    }
    yield return g;
}
Run Code Online (Sandbox Code Playgroud)

例子:

var source = new int[]
{
    3, 27, 53, 79, 113, 129, 134, 140, 141, 142, 145, 174, 191, 214, 284, 284
};

foreach (var g in source.GroupByProximity(5))
{
    Console.WriteLine(string.Join(", ", g));
}
Run Code Online (Sandbox Code Playgroud)

输出:

3
27
53
79
113
129, 134
140、141、142、145
174
191
214
284, 284