2012-03-14 47 views
8

我有一個非常簡單的List<string>設置,其中含有大量的單字符每件(即foreach會安慰走出去「一」「K」「P」等)列表<string>簡單組和計數?

我希望做的是能夠到組的項目,並指望有每一種的許多發生,所以我會得到類似的輸出:

a - 2 
t - 3 
y - 3 

上做到這一點的最佳方式有什麼建議?

我正在使用.Net 4,如果有任何幫助。

回答

32

(假設每個條目是單個字符,沒有任何理由不通過的方式有List<char>?)

如何:

// To get a Dictionary<string, int> 
var counts = list.GroupBy(x => x) 
       .ToDictionary(g => g.Key, g => g.Count()); 

// To just get a sequence 
var counts = list.GroupBy(x => x) 
       .Select(g => new { Text = g.Key, Count = g.Count() }); 

注意,這是有點低效就內部代表而言。您絕對可以更高效地「手動」進行操作,但這也需要更多的工作。除非你的清單很大,否則我會堅持這一點。

8

要做到這一點最簡單的方法是使用Linq的

var list = new[] { "a", "a", "b", "c", "d", "b" }; 
var grouped = list 
    .GroupBy(s => s) 
    .Select(g => new { Symbol = g.Key, Count = g.Count() }); 

foreach (var item in grouped) 
{ 
    var symbol = item.Symbol; 
    var count = item.Count; 
} 
2
var list = new[] {"a", "t", "t", "y", "a", "y", "y", "t"}; 
var result = (from item in list 
       group item by item into itemGroup 
       select String.Format("{0} - {1}", itemGroup.Key, itemGroup.Count()));