2017-01-17 38 views
0

我寫了這段代碼,它的工作正常。有沒有更好的方法使用LINQ來降低時間複雜度。我想用c中的linq來計算列表中每個元素的數量#

List<int> list = new List<int>() { 1, 2, 3, 1, 2, 3, 1, 2, 7, 2, 2 }; 

var distinctList = list.Distinct(); 

var listWithCount = distinctList.Select(q=>new { num=q, count = list.Count(number=>number==q) }); 

foreach(var number in listWithCount) 
{ 
    Console.WriteLine("num : " + number.num + " count : " + number.count); 
} 
+2

Worksing代碼是題外話在SO,我的朋友,也許你應該在codereview中發佈。 – Ian

+2

你可以試試GroupBy。我認爲它應該是list.GroupBy(p => p).select(p => new {number = p.Key,count = p.Count())...或者類似的東西。 –

+0

thanx @AndreiNeagu – huzefa

回答

4

您可以ToDictionary一起使用GroupBy

List<int> list = new List<int>() { 1, 2, 3, 1, 2, 3, 1, 2, 7, 2, 2 }; 

Dictionary<int, int> counts = list.GroupBy(x => x) 
            .ToDictionary(k => k.Key, v => v.Count()); 
1

這裏的最小變化,你需要:

List<int> list = new List<int>() { 1, 2, 3, 1, 2, 3, 1, 2, 7, 2, 2 }; 

foreach (var number in list.GroupBy(x => x)) 
{ 
    Console.WriteLine("num : " + number.Key + " count : " + number.Count()); 
}