Supongamos que tengo una lista de elementos (por ejemplo, Publicaciones) y quiero encontrar el primer elemento de acuerdo con un orden no trivial (por ejemplo, PublishDate y luego CommentsCount como desempate). La forma natural de hacer esto con LINQ es así:¿Cómo encontrar el primer artículo según un pedido específico usando LINQ en O (n)?
posts.OrderBy(post => post.PublishDate).ThenBy(post => post.CommentsCount).First()
Sin embargo, el micro-optimizador en mí está preocupado de que llamar OrdenarPor en realidad me O (n * LGN) cuesta para clasificar toda la lista, cuando todo Lo que realmente necesito es una operación O (n) find-minimum.
Entonces, ¿LINQ es lo suficientemente inteligente como para devolver algo de OrderBy() que sabe cómo optimizar las llamadas posteriores First()? De lo contrario, ¿cuál es la mejor manera de hacerlo desde el primer momento? (Siempre puedo escribir mi propia implementación FindMinimumItem, pero eso parece exagerado).
si la clave es realmente tan impreso que no necesita el ThenBy pero podría crear una clave coumpund de los dos. Lo cual sería fácil ya que el primero es un largo (tic) o un fijo con una cuerda. y que de hecho sería O (n) que usted solicita, pero de nuevo no hay garantía de que O (n) sea más rápido que O (nlogn) –