2009-05-29 5 views
2

雇用主からハッシュテーブルをソートするように求められました。私はいつもハッシュテーブルの使い方は親切ではないと思っていました。私はこれを考えて間違っていますか?そうでなければ、良いVB.Net(はい、私を殺してくださいが、古いシステムです)の方法でハッシュテーブルをソートする方法を教えてください。ハッシュテーブルをソートする理由

ありがとうございました。

+1

この雇用者は、先のとがった髪を持っていますか? – Josh

+1

それは私にディルバートを考えるようになります... – yinyueyouge

+0

私はこれに簡単な解決策を見つけましたhttp://blog.larmib.com/2012/sorting-vb-net-hashtable-sorting-resolved/ – LJ2010

答えて

5

ファイルから名前と値のペアを読み込み、ファイルにリストされている順序で保存する必要がありますが、O(1)ルックアップ時間が必要な場合もあります。ソートされたハッシュテーブルは、どのように両方を達成するかです。

.NET 1.1では、System.Collections.SortedListを使用します。 .NET 2.0以降の場合は、System.Collections.Generic.SortedDictionaryを使用します。

1

私はDocMax's answerが好きです。

別のオプション:
ロールSortedListのかSortedDictionaryは、ボンネットの下に何をしているかのラインに沿った独自のソリューション:

  1. が配列
  2. ソートにハッシュテーブルのキー(または値)を置きますアレイ
  3. アレイと出力ソートされたデータ上
  4. 反復

(コードがわずかhereから改変)

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 

0

キューを使用してみてください:あなたは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 
関連する問題