雇用主からハッシュテーブルの並べ替えを依頼されました。私はいつも、ハッシュテーブルの使用法はソートに適していないと思っていました。私はこれを考えるのは間違っていますか?そうでない場合は、ハッシュテーブルを並べ替える良い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 (先入れ先出し) ルールに従うために必要なものを取得する必要がある場合に、Java や .NET などのほとんどの OOP で使用されます。
スタックは 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