我想在c#中使用linq计算列表中每个元素的数量

时间:2017-01-17 05:35:06

标签: c# linq list count time-complexity

我编写此代码并正常工作。有没有更好的方法可以使用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 个答案:

答案 0 :(得分:4)

您可以将GroupByToDictionary一起使用:

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 :(得分: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());
}
相关问题