我是C#的新手,所以对我轻松一点。无论如何,我列出了数字

List<int> numbers = new List<int>();


我想列出每个数字及其计数/频率。

var grouped = numbers
    .GroupBy(i => i)
    .Select(i => new { Number = i.Key, Count = i.Count() });


在本地人中,我可以看到该组,该组具有一个IEnumerator接口,其中包含所有数字及其计数值image of what I'm talking about。那么有没有办法列出数字及其频率/计数?

谢谢。

最佳答案

IEnumerable<T>是一个序列,因此它没有计数。但是Enumerable.CountIEnumerable<T>的扩展方法

也就是说,您不一定需要将IEnumerable<T>转换为List<T>

var grouped = numbers
    .GroupBy(i => i)
    .Select(i => new { Number = i.Key, Count = i.Count() });

var groupedCount = grouped.Count();

// You may iterate grouped
foreach(var value in grouped)
{
   Console.WriteLine($"{value.Number} {value.Count}");
}


如果您确实需要List<T>语义,则只需调用Enumerable.ToList

var grouped = numbers
    .GroupBy(i => i)
    .Select(i => new { Number = i.Key, Count = i.Count() })
    .ToList();


另一方面,您可以将所有内容直接转换为string,如下所示:

var groupText = string.Join("\n", numbers
                                 .GroupBy(i => i)
                                 .Select(i => $"Number: {i.Key} Count: {i.Count()}"))

关于c# - 将IEnumerator的元素获取到列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51080148/

10-09 15:24