如何根据linq和c#列中的行之间的差异进行分组?

Wei*_*nix 5 c# linq group-by

我想在行中的值之间的差异大于5时创建一个新组.

例:

int[] list = {5,10,15,40,45,50,70,75};
Run Code Online (Sandbox Code Playgroud)

应该给我3组:

1,[ 5,10,15 ]
2,[40,45,50]
3,[70,75]
Run Code Online (Sandbox Code Playgroud)

可以在这里使用Linq吗?

谢谢!

Dmi*_*nko 4

利用副作用( group) 不是一个好的做法,但可能会有所帮助:

  int[] list = { 5, 10, 15, 40, 45, 50, 70, 75 };

  int step = 5;
  int group = 1;

  var result = list
    .Select((item, index) => new {
               prior = index == 0 ? item : list[index - 1],
               item = item,
             })
    .GroupBy(pair => Math.Abs(pair.prior - pair.item) <= step ? group : ++group, 
             pair => pair.item);
Run Code Online (Sandbox Code Playgroud)

测试:

  string report = string.Join(Environment.NewLine, result
    .Select(chunk => String.Format("{0}: [{1}]", chunk.Key, String.Join(", ", chunk))));
Run Code Online (Sandbox Code Playgroud)

结果:

1: [5, 10, 15]
2: [40, 45, 50]
3: [70, 75]
Run Code Online (Sandbox Code Playgroud)