使用LINQ </int,int> </int>将List <int>转换为Dictionary <int,int>

时间:2014-09-15 09:00:04

标签: c# linq list dictionary

说我有以下列表:

  List<int> list = new List<int>() { 5, 5, 6, 6, 6, 7, 7, 7, 7 };

如何将列表转换为Dictionary,其中值是使用LINQ列表中每个不同数字的计数?例如,上面的列表应该转换为包含以下元素的字典:

键 - &gt;值

5 - &gt; 2

6 - &gt; 3

7 - &gt; 4

4 个答案:

答案 0 :(得分:10)

var result = list.GroupBy(i => i).ToDictionary(g => g.Key, g => g.Count());

答案 1 :(得分:2)

Efficent解决方案(仅收集1次迭代):

var output = new Dictionary<int, int>();
foreach (var val in list)
{
    if (!output.ContainsKey(val)) 
    {
        output.Add(val, 1);
    }
    else
    {
        output[val] = output[val] + 1;
    }
}

答案 2 :(得分:1)

var group = list.GroupBy(T => T).ToDictionary(T => T.Key, T => T.Count())

答案 3 :(得分:1)

试试这个:

var dic =    list.GroupBy(c => c)
                 .Select(c => new {c.Key, Count = c.Count()})
                 .ToDictonary(c => c.Key, q => q.Count)