J'ai un class A { public float Score; ... }
et un IEnumerable<A> items
et je voudrais trouver le A
qui a un score minimal.Comment utiliser linq pour trouver le minimum
L'utilisation de items.Min(x => x.Score)
donne le score minimal et non l'instance avec un score minimal.
Comment puis-je obtenir l'instance en itérant seulement une fois à travers mes données?
Modifier: Tant il y a trois solutions principales:
Rédaction d'une méthode d'extension (proposée par Svish). Avantages: Facile à utiliser et évalue Score une seule fois par article. Contre: Nécessite une méthode d'extension. (J'ai choisi cette solution pour mon application.)
Utilisation de l'agrégat (proposé par Daniel Renshaw). Avantages: Utilise une méthode LINQ intégrée. Contre: Légèrement obfusqué à l'œil non formé et appelle l'évaluateur plus d'une fois.
Implémentation d'IComparable (proposée par cyberzed). Avantages: Peut utiliser Linq.Min directement. Contre: Fixé à un comparateur - impossible de choisir librement le comparateur lors de l'exécution du calcul minimum.
Pas tout à fait. Connaître l'index n'aide pas directement pour IEnumerable. Dans certains cas, il faut recommencer en utilisant l'index pour trouver l'instance désirée. – Danvil