2009-12-28 30 views
5

Tôi có một biểu thức lambda nhận kết quả từ một Từ điển.C# Linq Result ToDictionary Help

var sortedDict = (from entry in dctMetrics 
        orderby entry.Value descending 
        select entry); 

Biểu thức kéo trở lại các cặp tôi cần, tôi có thể thấy chúng trong chế độ gỡ lỗi của IDE.

Làm cách nào để chuyển đổi từ điển này trở lại từ điển cùng loại với nguồn? Tôi biết TED của ClassifiedDict là một KeyValuePair, nhưng tôi gặp khó khăn khi hiểu đầy đủ cú pháp của phương thức mở rộng ToDictionary. Tôi cũng đã cố gắng báo cáo kết quả var để xây dựng lại một từ điển mới, nhưng vô ích.

Có một cái gì đó như thế này (chức năng khôn ngoan):

var results = (from entry in dictionary 
       orderby entry.Value descending 
       select entry); 
Dictionary<string,float> newDictionary = results as (Dictionary<string,float>); 
+0

Cú pháp Lambda có dạng «t => Func '. Xem câu trả lời của mquander - 'r => r.Key' và' r => r.Value' là lambdas. Đừng nhầm lẫn chúng với các biểu thức truy vấn ('từ x trong y chọn x'). – Aaronaught

Trả lời

15

Bạn có thể làm điều đó như thế này:

var newDictionary = results.ToDictionary(r => r.Key, r => r.Value); 

đọc mà như "cho mỗi cặp trong kết quả, thêm yếu tố đó đến từ điển mới, trong đó khóa sẽ được tạo thành khóa của cặp và giá trị sẽ được tạo thành giá trị của cặp. "

Ngoài ra, chỉ dựa trên mã mẫu của bạn - bạn nên nhớ rằng Dictionary<T, U> được triển khai dưới dạng bảng băm, vì vậy nó sẽ không duy trì thứ tự của các yếu tố bạn đưa vào đó. Thay vào đó, hãy cân nhắc sử dụng một số SortedDictionary hoặc SortedList nếu bạn cần bản đồ đã đặt hàng.

+0

Cảm ơn nhiều! Giải quyết tai ương của tôi! – Simpleton

+0

Lol, tôi thích cách phức tạp một số mã của tôi được, và sau đó 5 giây trên SO và nó là 1/10th của kích thước .... vì vậy đơn giản –

+0

phím không phải là danh sách sau khi gõ r. – Kenta

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