2

雇用主からハッシュテーブルの並べ替えを依頼されました。私はいつも、ハッシュテーブルの使用法はソートに適していないと思っていました。私はこれを考えるのは間違っていますか?そうでない場合は、ハッシュテーブルを並べ替える良いVB.Net(はい、今すぐ殺してください、しかしそれは古いシステムです)の方法を教えてください。

ありがとう。

4

3 に答える 3

5

ファイルから名前と値のペアを読み取り、ファイルにリストされている順序でそれらを保持する必要があるだけでなく、O(1) ルックアップ時間も必要とするケースがいくつかありました。ソートされたハッシュテーブルは、私が両方を達成する方法です。

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

于 2009-05-29T04:23:39.307 に答える
1

私はDocMaxの答えが好きです。

別のオプション:
SortedList または SortedDictionary がフードの下で行っていることの行に沿って、独自のソリューションを展開します。

  1. ハッシュテーブルのキー (または値) を配列に入れる
  2. 配列の並べ替え
  3. 配列を反復処理し、並べ替えられたデータを出力する

(ここから少し変更されたコード)

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

于 2009-05-29T05:18:09.280 に答える
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
于 2011-12-13T12:54:13.800 に答える