Je pense que c'est le plus lisible O(n) réponse standard en utilisant LINQ.
var max = results.Aggregate((l, r) => l.Value > r.Value ? l : r).Key;
edit: explication pour CoffeeAddict
Aggregate
est le LINQ pour le nom communément appelé concept fonctionnel Fois
Il passe en boucle sur chaque élément de l'ensemble et s'applique quelle que soit la fonction que vous fournissez.
Ici, la fonction que j'offre est une fonction de comparaison qui renvoie la plus grande valeur.
Alors que le bouclage, Aggregate
se souvient de la déclaration de résultat de la dernière fois qu'il appelle ma fonction. Il se nourrit de cela dans ma fonction de comparaison comme variable l
. La variable r
est l'élément actuellement sélectionné.
Ainsi, après agrégées en boucle sur l'ensemble de la série, elle renvoie le résultat de la dernière fois, il a appelé ma fonction de comparaison. Puis j'ai lu l' .Key
membre de partir parce que je sais que c'est une entrée de dictionnaire
Voici une autre façon de voir les choses [je ne garantis pas que cette compile ;) ]
var l = results[0];
for(int i=1; i<results.Count(); ++i)
{
var r = results[i];
if(r > l)
l = r;
}
var max = l.Key;