首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >查找List<int>中出现次数最多的数字

查找List<int>中出现次数最多的数字
EN

Stack Overflow用户
提问于 2008-12-10 12:55:29
回答 5查看 26.2K关注 0票数 30

有没有使用linq的又快又好的方法?

EN

Stack Overflow用户

发布于 2013-05-31 13:01:35

摘自我的答案here

代码语言:javascript
复制
public static IEnumerable<T> Mode<T>(this IEnumerable<T> input)
{            
    var dict = input.ToLookup(x => x);
    if (dict.Count == 0)
        return Enumerable.Empty<T>();
    var maxCount = dict.Max(x => x.Count());
    return dict.Where(x => x.Count() == maxCount).Select(x => x.Key);
}

var modes = { }.Mode().ToArray(); //returns { }
var modes = { 1, 2, 3 }.Mode().ToArray(); //returns { 1, 2, 3 }
var modes = { 1, 1, 2, 3 }.Mode().ToArray(); //returns { 1 }
var modes = { 1, 2, 3, 1, 2 }.Mode().ToArray(); //returns { 1, 2 }

我在上面的方法和David B's TakeWhile之间进行了性能测试。

源={ },迭代= 1000000

我的-300ms,David的-930ms来源={1 },迭代= 1000000

我的-1070ms,大卫的-1560ms来源= 100+ int,有2个副本,迭代= 10000

我的-300ms,大卫的-500ms源= 10000个随机整数,大约有100+个副本,迭代= 1000次

我的- 1280毫秒,大卫的- 1400毫秒

票数 3
EN
查看全部 5 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/355945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档