我想选择一个在 C# 中具有最大值的 iddictionary<int, double>
例如
初始字典
1 0.8
2 0.78
3 0.9
4 0.87
选择后
3 0.9
我当前的代码
dic.AsParallel().Max(x => x.Value);
我想选择一个在 C# 中具有最大值的 iddictionary<int, double>
例如
初始字典
1 0.8
2 0.78
3 0.9
4 0.87
选择后
3 0.9
我当前的代码
dic.AsParallel().Max(x => x.Value);
听起来你想要一个MaxBy
构造。这在普通的 LINQ to Objects 中不存在,尽管我在MoreLINQ中有一个,所以你会写:
var result = dictionary.MaxBy(pair => pair.Value);
但是,这不会以您想要的方式并行化。您至少可以尝试使用创建自己的包含相关值的可比较类型的重载:ParallelEnumerable.Max
public class ComparablePair : IComparable<ComparablePair>
{
// Have key and value, then implement IComparable<T> by
// comparing values
}
然后使用:
var result = dictionary.AsParallel()
.Max(pair => new ComparablePair(pair));
dic.AsParallel().First(y => y.Value == dic.Select(x => x.Value).Select(x => x.Max())).Key
OrderBy(x => x.Value).First() 怎么样?