2014-10-01 85 views
0

我需要從源序列提取所有負子序列。例如,我有:如何使用LINQ提取所有負子序列

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

在結果我想這些序列:

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

是否有可能使用來解決任務LINQ?

+0

我解決了使用循環任務。不幸的是,我沒有任何想法,我可以如何使用LINQ來解決它:( – elias 2014-10-01 04:32:03

+0

@EhsanSajjad:爲什麼? – jgauffin 2014-10-01 04:44:50

+3

@elias:如果你不知道如何解決它,你爲什麼要使用LINQ?機會是你不會是能夠在以後讀取代碼,這反過來又使它更難以維護它。當性能不成問題時,總是選擇最可讀的方法。 – jgauffin 2014-10-01 04:46:34

回答

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

+0

xv是什麼 – 2014-10-01 04:50:29

+1

對不起,截圖使用v作爲匿名中的屬性名類型,然後我改變它到x – tsuta 2014-10-01 04:51:22

+0

雅得到了那裏是xx不是xv rgt – 2014-10-01 04:51:42