雇主要求我对哈希表进行排序。我一直认为哈希表的使用在某种程度上是不友好的。我这样想是不是错了,如果不是,你能给我指出一个好的 VB.Net(是的,现在杀了我,但它是一个旧系统)对哈希表进行排序的方法。
谢谢。
我有几种情况,我从文件中读取名称-值对,需要按照文件中列出的顺序保存它们,但还需要 O(1) 查找时间。一个排序的哈希表是我完成这两者的方式。
对于 .NET 1.1,使用 System.Collections.SortedList。对于 .NET 2.0+,使用 System.Collections.Generic.SortedDictionary。
我喜欢DocMax 的回答。
另一种选择:
按照 SortedList 或 SortedDictionary 在幕后所做的事情推出您自己的解决方案:
(代码从这里稍作修改)
Option Strict On
Imports System.Collections
Public Module modMain
Public Sub Main()
Dim myHashTable As New Hashtable
myHashTable.Add("C", "3")
myHashTable.Add("A", "1")
myHashTable.Add("B", "2")
Dim keys As ICollection = myHashTable.Keys
Dim keysArray(myHashTable.Count - 1) As String
keys.CopyTo(keysArray, 0)
Array.Sort(keysArray)
For Each key As String in keysArray
Console.WriteLine("{0} is {1}", key, myHashTable(key))
Next
End Sub
End Module
尝试使用队列:
当您需要获得遵循 FIFO(先进先出)规则所需的内容时,在大多数 OOP(如 Java、.NET)中都会使用队列。
堆栈是 LIFO - 后进先出...
Dim myQ As Queue(Of KeyValuePair(Of Integer, String)) = New Queue(Of KeyValuePair(Of Integer, String))
myQ.Enqueue(New KeyValuePair(Of Integer, String)(1, "one"))
myQ.Enqueue(New KeyValuePair(Of Integer, String)(2, "two"))
myQ.Enqueue(New KeyValuePair(Of Integer, String)(3, "three"))
'later on you can retrieve objects by
'myQ.Dequeue
Response.Write("<p>Queue</p>")
For Each kvp As KeyValuePair(Of Integer, String) In myQ
Response.Write(kvp.Key & " is " & kvp.Value & "<br>")
Next
Dim ht As Hashtable = New Hashtable()
ht.Add(1, "one")
ht.Add(2, "two")
ht.Add(3, "three")
Response.Write("<p>Hashtable</p>")
For Each kvp As DictionaryEntry In ht
Response.Write(kvp.Key & " is " & kvp.Value & "<br>")
Next