如何使用LINQ提取所有负序子

eli*_*ias 0 c# linq

我需要从源序列中提取所有负序子.例如,我有:

{-2,-2,5,9,1,-6,-7,-2,5,11,-2}

在结果中我想得到这些序列:

{-2,-2},{ - 6,-7,-2}和{-2}

是否可以使用LINQ解决任务?

tsu*_*uta 7

您可以使用键变量来区分哪些是负数.

var list = new[] { -2, -2, 5, 9, 1, -6, -7, -2, 5, 11, -2 };
var key = 1;
var arr = list.Select(x => new { x, key = x < 0 ? key : (key++ * 0) })
    .Where(x => x.key > 0)
    .GroupBy(x => x.key)
    .Select(g => g.Select(x => x.x).ToArray())
    .ToArray();
Run Code Online (Sandbox Code Playgroud)

如果没有Where,GroupBy并且Select,其结果将是这样的:

图片

然后我们只需要只取正键,按键分组,只取值.

产量

{ -2, -2  }
{ -6, -7, -2  }
{ -2  }
Run Code Online (Sandbox Code Playgroud)

DEMO