我有一個非常簡單的List<string>
設置,其中含有大量的單字符每件(即foreach
會安慰走出去「一」「K」「P」等)列表<string>簡單組和計數?
我希望做的是能夠到組的項目,並指望有每一種的許多發生,所以我會得到類似的輸出:
a - 2
t - 3
y - 3
上做到這一點的最佳方式有什麼建議?
我正在使用.Net 4,如果有任何幫助。
我有一個非常簡單的List<string>
設置,其中含有大量的單字符每件(即foreach
會安慰走出去「一」「K」「P」等)列表<string>簡單組和計數?
我希望做的是能夠到組的項目,並指望有每一種的許多發生,所以我會得到類似的輸出:
a - 2
t - 3
y - 3
上做到這一點的最佳方式有什麼建議?
我正在使用.Net 4,如果有任何幫助。
(假設每個條目是單個字符,沒有任何理由不通過的方式有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() });
注意,這是有點低效就內部代表而言。您絕對可以更高效地「手動」進行操作,但這也需要更多的工作。除非你的清單很大,否則我會堅持這一點。
要做到這一點最簡單的方法是使用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;
}
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()));