Supposons que j'ai une liste d'éléments (par exemple, Posts) et que je souhaite trouver le premier élément en fonction d'un ordre non trivial (par exemple, PublishDate et ensuite CommentsCount comme un tie-breaker). La façon naturelle de le faire avec LINQ est comme ceci:Comment trouver le premier article selon un ordre spécifique en utilisant LINQ dans O (n)?
posts.OrderBy(post => post.PublishDate).ThenBy(post => post.CommentsCount).First()
Cependant, le micro-optimiseur me craint que l'appel OrderBy me coûte réellement O (n * LGN) pour trier la liste entière, quand tout J'ai vraiment besoin d'une opération O (n) find-minimum. Donc, LINQ est-il assez intelligent pour renvoyer quelque chose de OrderBy() qui sait comment optimiser les appels First() suivants? Si ce n'est pas le cas, quelle est la meilleure façon de le faire dès la sortie de l'emballage? (Je peux toujours écrire ma propre implémentation de FindMinimumItem mais cela semble être trop compliqué).
si la clé est réellement imprimé vous n'avez pas besoin de ThenBy mais pourrait plutôt créer une clé Coumpund des deux. Ce qui serait facile puisque le premier est soit un long (tick) ou un fixe avec string. et ce serait en fait être O (n) que vous demandez mais là encore il n'y a aucune garantie que O (n) est plus rapide que O (nlogn) –