конкретный запрос plinq - PullRequest
       15

конкретный запрос plinq

1 голос
/ 14 июля 2011

Я хочу выбрать один идентификатор, который имеет максимальное значение в C # dictionary<int, double>

например

начальный словарь

 1   0.8   
 2   0.78   
 3   0.9   
 4   0.87   

после выбора

 3   0.9   

мой текущий код

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

Ответы [ 3 ]

3 голосов
/ 14 июля 2011

Звучит так, будто вы хотите 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));
1 голос
/ 14 июля 2011
dic.AsParallel().First(y => y.Value == dic.Select(x => x.Value).Select(x => x.Max())).Key
0 голосов
/ 14 июля 2011

А как насчет OrderBy (x => x.Value) .irst ()?

...