我需要从源序列中提取所有负序子。例如,我有:
{-2,-2,5,9,1,6,-7,-2,5,11,-2}
在结果中我想得到这些序列:
{ - 2,-2},{ - 6,-7,-2}和{-2}
是否可以使用LINQ解决任务?
答案 0 :(得分: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();
如果没有Where
,GroupBy
和Select
,结果将如下所示:
然后我们只需要取正键,按键分组,只取值。
输出
{ -2, -2 }
{ -6, -7, -2 }
{ -2 }