Supponiamo di avere un elenco di elementi (ad esempio, Post) e voglio trovare il primo elemento in base ad alcuni ordinamenti non banali (ad esempio, PublishDate e quindi CommentiCount come tie-breaker). Il modo naturale per fare questo con LINQ è come questo:Come trovare il primo elemento in base a un ordine specifico utilizzando LINQ in O (n)?
posts.OrderBy(post => post.PublishDate).ThenBy(post => post.CommentsCount).First()
Tuttavia, il micro-ottimizzatore in me, è preoccupato che chiama OrderBy mi O (n * LGN) costa in realtà per l'ordinamento l'intero elenco, quando tutti Ho davvero bisogno di un'operazione di ricerca O (n) minima.
Quindi, LINQ è abbastanza intelligente da restituire qualcosa da OrderBy() che sa come ottimizzare le chiamate First() successive? In caso contrario, qual è il modo migliore per farlo subito? (Posso sempre scrivere la mia implementazione su FindMinimumItem ma sembra eccessivo).
se la chiave è in realtà stampato non è necessario il ThenBy ma potrebbe invece creare una chiave coumpund dei due. Quale sarebbe facile poiché il primo è o un lungo (tick) o un fisso con una stringa. e che dovrebbe essere O (n) che tu richiedi ma poi di nuovo non c'è garanzia che O (n) sia più veloce di O (nlogn) –