2014-03-03 19 views
1

如何可以將兩組不同(第一typeof years == IEnumerable<string>和第二typeof occurs = IEnumerable<int>)序列引入1個序列由下一個關鍵:如果在occurs數目是相同的,那麼爲了通過years,否則爲了通過occurs僅使用LINQ如何在LINQ中分組2個不同的序列?

我有下面的方式將這些序列:

var years = some_strings.Select(x => x.Split(' ')[1]); 
var occurs = years.Select(x => years.Count(e => e == x)); 

所以變量years只包含字符串憑藉多年和occurs包含在第一序列相同年數。

我無法理解LINQ中的這些技巧。

我會這樣做嗎?

occurs.GroupBy(x => x ??? 

我應該在哪裏使用第二個序列? 也許我可以在1個查詢中得到這些序列,然後處理它?

UPD

我修改了2個1查詢使用匿名類(?):

some_strings.Select(x => x.Split(' ')[1]). 
    GroupBy(x => x). 
    Select(x => new {num = x.Key, count = x.Count() }) 

因此,有多年,無論是在它發生。

我試圖讓下一個字符串:

1 1990 
1 1991 
1 1992 
2 1967 
2 1968 
5 2010 
... 

現在,具有需要的值的查詢,我怎麼可以排序像前款規定?

+0

不能確定什麼是你想實現的,因爲沒有代碼,但提到的聲明可以合併如「無功富= some_strings.Split('')[1]。選擇(x => x ......'根據您需要執行投射的返回類型,您也可以.Cast <>來投射最終輸出。 – Vishal

+0

那麼你的編輯中的查詢就是你想要的?在這種情況下,您應該將其作爲答案發布,而不是作爲對問題的修改。如果沒有,你需要解釋你有什麼問題。 – Servy

+0

@Servy我更新了我的問題,我希望現在有點更清楚 – zerospiel

回答

4

你非常接近。這應該給你類似的最新更新字符串列表:

var occurences 
    = years.GroupBy(x => x) 
      .Select(x => new { Year = int.Parse(x.Key), Count = x.Count() }) 
      .OrderBy(x => x.Count) 
      .ThenBy(x => x.Year) 
      .Select(x => string.Concat(x.Count, " ", x.Year)) 
      .ToList(); 

使用您創建的匿名類型,您可以:

  • 爲了通過計數
  • 然後按年份
  • 和最後創建一個使用的字符串列表string.Concat

(注意:牛逼int.Parse將拋出一個異常,如果任何years你的字符串是不實際的數字)

+0

太棒了!完美的作品。這正是我需要的:) – zerospiel

相關問題