2011-07-01 46 views
4

我有一個List對象,它包含Id值,例如它包含: 1,2,10,1,23,11,1,4,2,2,..等我需要找到在C#中使用Linq發生了多少次「1」,「2」等...發生了 。List <int>使用linq過濾

請幫忙。

+1

在公平我已經用了很多何在,加入等之前我發現了通過...分組。 – Rup

回答

13

這是非常簡單的使用Enumerable.GroupBy

var grouped = list.GroupBy(x => x); 

foreach (var group in grouped) 
{ 
    Console.WriteLine("{0} appears {1} times", group.Key, group.Count()); 
} 

或者:

var query = list.GroupBy(x => x, (x, g) => new { Key = x, Count = g.Count() })); 

foreach (var result in query) 
{ 
    Console.WriteLine("{0} appears {1} times", result.Key, result.Count); 
} 

(所不同的是隻是,當我們轉換成組的結果,真的。)

12

使用GroupBy

var les = new[] { 1, 2, 10, 1, 23, 11, 1, 4, 2, 2 }; 

var result = les 
    .GroupBy(i => i, (e, g) => new { Value = e, Count = g.Count() }); 

或者用替代語法:

var result = 
    from i in les 
    group i by i 
    into g 
    select new { Value = g.Key, Count = g.Count() }; 
3
var l = new List<int> {1,2,10,1,23,11,1,4,2,2}; 
l.GroupBy(i => i) 
    .ToList() 
    .ForEach(g => Console.WriteLine("{0} : {1}", g.Key, g.Count())); 
2
var list = new List<int> { 1, 2, 10, 1, 23, 11, 1, 4, 2, 2, }; 
var groups = list.GroupBy(i => i); 
foreach (var group in groups) 
    Console.WriteLine("{0} occurs {1} times", group.Key, group.Count()); 
+0

哦,我太晚了... –