2012-12-12 59 views
7

tôi cần phải sắp xếp một OrderedDictionary (System.Collections.Specialized) tôi có mã này:Làm thế nào để sắp xếp một OrderedDictionary bằng cách sử dụng LINQ trong C# (sử dụng .NET 3.5)?

var od = new System.Collections.Specialized.OrderedDictionary(); 
od.Add("a1", 3); 
od.Add("a2", 5); 
od.Add("a3", 2); 
od.Add("a4", 4); 

Tôi muốn sắp xếp nó sử dụng giá trị. Tôi có thể làm điều đó bằng cách sử dụng LINQ?

Trả lời

4

Sau đây sẽ cung cấp cho bạn một từ điển được sắp xếp dựa trên OrderedDictionary của bạn.

var normalOrderedDictionary= od.Cast<DictionaryEntry>() 
         .OrderBy(r=> r.Value) 
         .ToDictionary(c=> c.Key, d=> d.Value); 

Có một điều mặc dù, ToDictionary trở một từ điển thông thường, nhưng trật tự được duy trì trong từ điển cho việc tra cứu, càng sớm càng bất kỳ mục mới được đưa vào từ điển, họ trật tự có thể không được đảm bảo. Để tránh điều này, sử dụng SortedDictionary<TKey,TValue> trong đó có một nhà xây dựng mà phải mất một từ điển thông thường như tham số

var sortedDictionary = new SortedDictionary<string, string>(normalOrderedDictionary); 

(Hãy chắc chắn rằng để thay thế string với các loại chính xác cho Key và giá trị trong dòng ở trên).

Output:

foreach (var entry in sortedDictionary) 
    Console.WriteLine("Key: {0} Value: {1}", entry.Key, entry.Value); 

Key: a3 Value: 2 
Key: a1 Value: 3 
Key: a4 Value: 4 
Key: a2 Value: 5 
+1

Cảm ơn Habib .. câu trả lời của bạn cũng đã hoạt động. Tôi chỉ không có quá nhiều điểm danh tiếng. –

+2

OK cảm ơn ..Must nói stackoverflow chỉ đơn giản là đá .. !! –

+1

@LalaTrivedi, bạn được chào đón – Habib

2

Bạn có thể liệt kê các giá trị/mục nhập theo giá trị dễ dàng. Bạn sẽ chỉ cần chuyển sang loại thích hợp để kích hoạt các tính năng LINQ.

var sortedOrder = od.Values 
    .Cast<int>()  // this is an enumeration of ints 
    .OrderBy(i => i);; // enumerate through ordered by the value 

foreach (var item in sortedOrder) 
{ 
    // do stuff 
} 
+0

Great..This sẽ giúp. Ngoài ra, phương thức AsQueryable() cũng làm được gì. Tôi có thể linq truy vấn để phân loại. –

+0

'AsQueryable()' chỉ đơn giản là lấy tập hợp như là một 'IQueryable ' (trái ngược với 'IEnumerable '). IQueryables chấp nhận [biểu thức LINQ] (http://msdn.microsoft.com/en-us/library/bb506649.aspx) cũng như biểu thức lambda khi tạo truy vấn giúp dễ dàng tạo truy vấn động hơn. –

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