Giả sử tôi có một danh sách các mục (ví dụ: Bài đăng) và tôi muốn tìm mục đầu tiên theo một số thứ tự không tầm thường (ví dụ: PublishDate và sau đó là CommentsCount là bộ ngắt kết nối). Cách tự nhiên để làm được điều này với LINQ là như thế này:Cách tìm mục đầu tiên theo một thứ tự cụ thể bằng LINQ trong O (n)?
posts.OrderBy(post => post.PublishDate).ThenBy(post => post.CommentsCount).First()
Tuy nhiên,-ưu vi trong tôi đang lo lắng rằng gọi OrderBy thực sự chi phí cho tôi O (n * LGN) để phân loại toàn bộ danh sách, khi tất cả Tôi thực sự cần là một hoạt động tìm kiếm tối thiểu O (n).
Vì vậy, LINQ có đủ thông minh để trả lại thứ gì đó từ OrderBy() biết cách tối ưu hóa các cuộc gọi First() tiếp theo không? Nếu không, cách tốt nhất để thực hiện việc này là gì? (Tôi luôn có thể viết thực hiện FindMinimumItem của riêng mình nhưng điều đó có vẻ như quá mức cần thiết).
nếu chìa khóa thực sự là như in bạn không cần ThenBy nhưng thay vào đó có thể tạo ra một chìa khóa coumpund của cả hai. Mà sẽ được dễ dàng kể từ khi người đầu tiên hoặc là một dài (đánh dấu) hoặc một cố định với chuỗi. và đó sẽ là Inf (O) mà bạn yêu cầu nhưng sau đó một lần nữa không có bảo đảm rằng O (n) là nhanh hơn O (nlogn) –