2010-09-29 31 views
12

Xin chào Tôi đã nhận được LINQ sau đây để đặt hàng đầu vào của tôi sau giá trị thấp nhất. Nhưng tôi muốn nó chỉ xuất ra các giá trị thấp nhất.Chỉ chọn các giá trị thấp nhất với LINQ

var sortedDict = (from entry in x where entry.Value > 0 orderby entry.Value ascending select entry); 

Bây giờ nếu nó nhận được thông tin sau.

3 4 2 6 2 

Đây sẽ là đầu ra của tôi

2 2 3 4 6 

gì tôi cần phải thay đổi trong LINQ của tôi vì vậy tôi chỉ nhận được kết quả này

2 2 

Trả lời

28

Vâng, bạn có thể làm:

int min = x.Min(entry => entry.Value); 
var lowestValues = x.Where(entry => entry.Value == min); 

Lưu ý rằng tôi đã chia một cách rõ ràng những lên, như nếu bạn sử dụng Where(entry => entry.Value == x.Min(y => y.Value)) nó sẽ tìm kiếm tối thiểu trên mỗi lần lặp. Mặt khác, đó là sự thật của LINQ to Objects - nhưng trong LINQ to SQL nó có thể là tốt hơn để thực hiện tất cả trong một truy vấn và để cơ sở dữ liệu sắp xếp nó ra.

+0

Điều này có nhanh hơn câu trả lời của KJN không? Câu trả lời của anh ta sẽ khiến Min() được tính toán lại cho mỗi mục nhập bên trong danh sách dữ liệu, hoặc trình biên dịch sẽ làm một số bộ nhớ đệm của giá trị này. Tôi nghi ngờ điều đó, nhưng tôi muốn làm cho nó được xác nhận theo cách này hay cách khác. –

+0

Có thông thường nó sẽ nhanh hơn. :) – kjn

+0

@ Øyvind Bråthen: Nếu bạn đang sử dụng LINQ to Objects, thì có - Min() sẽ được tính toán lại cho mỗi mục nhập trong danh sách. –

8

Bạn có thể thử một cái gì đó như thế này:

data.Where (d => d == data.Min()) 

Lưu ý đây không phải là nece ssarily cách nhanh nhất để làm điều này.

+0

Cảm ơn sự giúp đỡ của bạn KJN – gulbaek

+0

Nếu bạn lưu dữ liệu.Min() trong một biến, bạn có thể thực hiện điều này từ O (n^2) đến O (n). Tôi đang thực hiện một giả định về việc thực hiện các hàm LINQ và trình biên dịch C#. – JSideris

5

Trước tiên, tìm giá trị nhỏ nhất:

var min = (from entry in x where entry.Value > 0 select entry).Min(); 

Sau đó, chọn các mục:

var sortedDict = from entry in x where entry.Value == min select entry 

Sorting là không cần thiết cho kịch bản của mình.

+2

Cảm ơn bạn đã là người duy nhất kiểm tra lại các số trên 0 :-) – gulbaek

Các vấn đề liên quan