我编写此代码并正常工作。有没有更好的方法可以使用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);
}
答案 0 :(得分:4)
您可以将GroupBy
与ToDictionary
一起使用:
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());
}