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

时间:2014-10-01 04:17:45

标签: c# linq

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

  

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

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

  

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

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

1 个答案:

答案 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();

如果没有WhereGroupBySelect,结果将如下所示:

Image

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

输出

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

DEMO