How to sort the keys of a dictionary in reverse order using VB.NET?
我有一本字典:
1 | Dim dicItems As Dictionary(of Integer, String) |
字典中的项目有:
1 2 3 | 1,cat 2,dog 3,bird |
号
我希望订单是:
1 2 3 | 3,bird 2,dog 1,cat |
你不能对字典排序,你需要的是一个排序列表。
1 | Dim dicItems As New SortedList(Of Integer, String) |
这将按键值对项目排序。如果您想像您的示例那样按降序取出这些项,那么可以始终从列表的末尾开始执行循环,然后移到开头。
以下链接包含有关SortedList的更多信息。
http://msdn.microsoft.com/en-us/library/ms132319%28v=vs.110%29.aspx
字典没有您可以依赖的隐式顺序("返回项的顺序未定义")。
作为影子的附加组件,建议使用
1 2 3 4 | Dim list = New SortedList(Of Integer, String)(New DescendingComparer()) list.Add(3,"bird") list.Add(1,"cat") list.Add(2,"dog") |
。
1 2 3 4 5 6 7 | Public Class DescendingComparer Implements IComparer(Of Int32) Public Function Compare(x As Integer, y As Integer) As Integer Implements System.Collections.Generic.IComparer(Of Integer).Compare Return y.CompareTo(x) End Function End Class |
您可以使用LINQ轻松解决此问题:
1 2 3 4 5 6 7 8 9 10 | Dim dicItems As New Dictionary(Of Integer, String) With dicItems .Add(1,"cat") .Add(2,"dog") .Add(3,"bird") End With dim query = from item in dicItems order by item.Key descending select item |
如果需要,还可以使用lambda语法:
1 | Dim query = dicItems.OrderByDescending(Function(item) item.Key) |
。
不知道您为什么要这样做,因为字典中的项目顺序通常不重要,但您可以这样做:
1 2 3 4 5 6 7 8 9 | Dim dicItems As New Dictionary(Of Integer, String) With dicItems .Add("1","cat") .Add("2","dog") .Add("3","bird") End With Dim dicItemsReversed As New List(Of KeyValuePair(Of Integer, String)) dicItemsReversed.AddRange(dicItems.Reverse()) |
号
注意,我输出到另一个集合,在本例中是
1 2 3 4 | dicItems.Clear() For Each kv In dicItemsReversed dicItems.Add(kv.Key, kv.Value) Next |
作为主题的变体,您可以用其他LINQ替代品(如
1 2 3 | 3,bird 1,cat 2,dog |
。
(按值的字母顺序排序,升序)