C#统计重复整数次数,期望指定输出格式求助
解决C#整数列表重复次数统计的输出问题
嘿,我一眼就瞅出你代码里的问题了——你在遍历LINQ查询结果的时候,逻辑完全搞反了!
问题根源
你的初始LINQ查询其实是对的:它已经把wordlist里的整数按值分组,统计了每个整数的出现次数,还按次数降序排好了。但后面的foreach循环完全画蛇添足,而且搞错了输出对象:
- 你每次循环新建了一个只包含当前分组次数的
List<int> wordcount - 然后去统计这个列表里该次数出现的次数,结果自然是每次都输出「某个次数出现了1次」,完全不是你想要的「某个整数出现了N次」
修正后的代码
直接删掉那些多余的嵌套循环,遍历你的LINQ查询结果就行,因为查询结果里已经包含了你需要的整数(g.Key)和对应的次数(count):
// 你的初始LINQ查询可以保留,这里我把属性名改得更直观(可选) var numberCounts = from x in wordlist group x by x into g let count = g.Count() orderby count descending select new { Number = g.Key, Count = count }; // 直接遍历输出即可 foreach (var item in numberCounts) { System.Diagnostics.Debug.WriteLine("\"{0}\" occurs {1} time(s).", item.Number, item.Count); }
如果你更喜欢用LINQ方法链的写法,也可以这样写:
var numberCounts = wordlist .GroupBy(num => num) .Select(group => new { Number = group.Key, Count = group.Count() }) .OrderByDescending(result => result.Count);
效果验证
假设你的wordlist是new List<int> {2,2,2,3,3,5},修正后的代码会输出:
"2" occurs 3 time(s).
"3" occurs 2 time(s).
"5" occurs 1 time(s).
完全符合你想要的格式!
内容的提问来源于stack exchange,提问作者LiLin Sairefu Oteru
相关产品推荐
相关产品推荐

