2011-10-19 45 views
5

Tôi cần đặt hàng từ điển trong VB.net dựa trên các phím. Các khóa và giá trị là tất cả các chuỗi. Từ điển không có .Sort(). Có cách nào để làm điều này mà không cần phải viết thuật toán phân loại của riêng tôi?Sắp xếp từ điển dựa trên các phím

+0

"Đặt từ điển" có ý nghĩa gì đối với bạn? – jason

+0

Tôi đã sửa đổi nó để làm rõ điều đó, nhưng nó đã được chỉnh sửa. Tôi cần phải đặt hàng từ điển dựa trên các phím đó. – user489041

+0

Không, thấy, bạn vẫn không nói những gì bạn có nghĩa là "đặt hàng một từ điển." Nói với tôi rằng bạn muốn nó dựa trên các phím không giải thích những gì nó có nghĩa là bạn để "đặt hàng một từ điển." – jason

Trả lời

1

chính xác trong công việc vb.net mã này:

 Dim myDict As New Dictionary(Of String, String) 
     myDict.Add("one", 1) 
     myDict.Add("four", 4) 
     myDict.Add("two", 2) 
     myDict.Add("three", 3) 

     Dim sortedDict = (From entry In myDict Order By entry.Value Ascending).ToDictionary(Function(pair) pair.Key, Function(pair) pair.Value) 

     For Each entry As KeyValuePair(Of String, String) In sortedDict 
      Console.WriteLine(String.Format("{0,10} {1,10}", entry.Key, entry.Value)) 
     Next 
+0

Tôi nghĩ bạn muốn 'Order By entry.Key' không phải' entry.Value' dựa trên các chỉnh sửa của OP. –

+0

Đối với mục nhập.Key chúng ta có thể sử dụng SortedDictionary witout bất kỳ biểu thức LINQ – apros

2

Nếu bạn cần phải giữ lại các từ điển cơ bản và không sử dụng một SortedDictionary, bạn có thể sử dụng LINQ để trả lại một IEnumerable dựa tắt của những gì từng tiêu chí mà bạn cần :

Dim sorted = From item In items 
      Order By item.Key 
      Select item.Value 

các SortedDictionary có lẽ sẽ cho hiệu suất hơn dưới sử dụng lặp đi lặp lại tuy nhiên miễn là bạn không cần phải đảo ngược loại mà tại một số điểm trong tương lai.

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