1

我想选择一个在 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);
4

3 回答 3

3

听起来你想要一个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));
于 2011-07-14T12:07:28.053 回答
1
dic.AsParallel().First(y => y.Value == dic.Select(x => x.Value).Select(x => x.Max())).Key
于 2011-07-14T12:57:56.747 回答
0

OrderBy(x => x.Value).First() 怎么样?

于 2011-07-14T12:13:16.603 回答