有没有使用linq的又快又好的方法?
发布于 2013-05-31 13:01:35
摘自我的答案here
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毫秒
https://stackoverflow.com/questions/355945
复制相似问题