【问题标题】:a specific plinq query特定的 plinq 查询
【发布时间】:2011-07-14 12:03:12
【问题描述】:

我想选择一个在 C# dictionary<int, double> 中具有最大值的 id

例如

初始字典

 1   0.8   
 2   0.78   
 3   0.9   
 4   0.87   

选择后

 3   0.9   

我当前的代码

dic.AsParallel().Max(x => x.Value);

【问题讨论】:

  • 你的问题/问题是什么?
  • 您为什么决定使用 PLINQ 来处理这个特定的查询?

标签: c# dictionary plinq


【解决方案1】:

听起来你想要一个MaxBy 构造。这在普通的 LINQ to Objects 中不存在,虽然我在 MoreLINQ 中有一个,所以你会写:

var result = dictionary.MaxBy(pair => pair.Value);

但是,这不会以您想要的方式并行化。您至少可以尝试使用 this overload of 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));

【讨论】:

    【解决方案2】:
    dic.AsParallel().First(y => y.Value == dic.Select(x => x.Value).Select(x => x.Max())).Key
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-08
        相关资源
        最近更新 更多