如何在数组C#中查找众数?我想在数组中找到模式。我知道我必须做嵌套循环来检查每个值并查看元素在数组中出现的频率。然后我必须计算第二个元素出现的次数。下面的代码不起作用,任何人都可以帮助我。对于(inti=0;iv).OrderByDescending(g=>g.Count()).First()。钥匙;这简单快捷。但请注意(与LINQtoSQL不同)当仅需要第一个结果时,LINQtoObjects目前不会优化OrderByDescending。它对整个结果集进行整体排序,这是一个O(nlogn)操作。您可能需要这个O(n)算法。它首先在组中迭代一次以找到最大计数,然后再次迭代该计数的第一个对应键:vargroups=x.GroupBy(v=>v);intmaxCount=groups.Max(g=>g.Count());intmode=groups.First(g=>g.Count()==maxCount).Key;您还可以在MoreLINQ方法中使用MaxBy扩展来进一步改进解决方案,使其只需要遍历所有元素一次。非LINQ解决方案:int[]x=newint[]{1,2,1,2,4,3,2};词典计数=newDictionary();foreach(intainx){if(counts.ContainsKey(a))counts[a]=counts[a]+1elsecounts[a]=1}intresult=int.MinValue;intmax=int.MinValue;foreach(intkeyincounts.Keys){if(counts[key]>max){max=counts[key];结果=关键;}}Console.WriteLine("模式为:"+result);作为初学者,这可能没有多大意义,但值得提供基于LINQ的解决方案。x.GroupBy(i=>i)//将所有相同的值放入组中.OrderByDescending(g=>g.Count())//按照组的大小对组进行排序desc.Select(g=>g.Key)//组的键代表组中的项目。First()//列表中的第一个是最频繁的(模态)值假设x数组包含以下项目:int[]x={1,2,6,2,3,8,2,2,3,4,5,6,4,4,4,5,39,4,5};A。获取最大值:inthigh=x.OrderByDescending(n=>n).First();b.获取众数:以上是C#学习教程:C#如何在Array中查找众数?分享的所有内容,如果对你有用,需要进一步了解C#学习教程,希望你多多关注—intmode=x.GroupBy(i=>i)//Groupingsameitems.OrderByDescending(g=>g.Count())//现在获取值的频率.Select(g=>g.Key)//选择组的键.FirstOrDefault();//最后取最频繁值代表位置,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: