掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ハッシュテーブルの検索について (ID:124389)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
SortedListについて調べられましたか。 こうしたサーチはデーターをソートして、2分木検索で検索を行うと相場は決まっています。 SortedListはKeyでソートしてくれますのでKeyを2分木検索で検索すればいいのです。 下は簡単なサンプルです(エラーの処理など全て省略してあります、最近やけに突っ込まれるので・・) 実際は14文字を10文字で2分木検索してありますので、検索の結果は複数ヒットするはずですが、 実際は最初のヒットしたindexを返します、従って該当のデーターのどこに落ちるかは確定しませんが、 検索で帰ってくるindexの上と下のKeyの前の10文字を一致しなくなるまで探せば良いことになります。 (とりあえずこの部分は省略) 検索は高速です。確認の為、ListBoxとTextBoxを置いています。 Dim MySotedList As New SortedList Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load MySotedList.Add("12345678901111", "12345678901111D") MySotedList.Add("12345678902222", "12345678902222D") MySotedList.Add("12345678903333", "12345678901111D") MySotedList.Add("11111111111111", "11111111111111D") MySotedList.Add("11111111112222", "11111111112222D") MySotedList.Add("11111111113333", "11111111113333D") MySotedList.Add("22222222221111", "22222222221111D") MySotedList.Add("22222222222222", "22222222222222D") MySotedList.Add("22222222223333", "22222222223333D") For i As Integer = 0 To MySotedList.Keys.Count - 1 ListBox1.Items.Add(MySotedList.GetKey(i)) Next End Sub Public Function BinarySearch(ByVal DataStart As Integer, ByVal DataEnd As Integer, ByVal Data As String) As Integer '10文字の二分木検索 Dim DataIndex As Integer While (DataStart <= DataEnd) DataIndex = CType(DataStart + (DataEnd - DataStart) / 2, Integer) Dim s1 As String = CType(MySotedList.GetKey(DataIndex), String).Substring(0, 10) Dim s2 As String = Data.Substring(0, 10) If String.Compare(s1, s2) > 0 Then DataEnd = DataIndex - 1 ElseIf String.Compare(s1, s2) < 0 Then DataStart = DataIndex + 1 Else Return (DataIndex) End If End While End Function Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim t As Integer = BinarySearch(0, MySotedList.Keys.Count - 1, "2222222222") 'データーサーチ 'TextBox1.Text = CType(MySotedList.GetKey(t), String) 'Keyを表示 TextBox1.Text = CType(MySotedList.Item(MySotedList.GetKey(t)), String) 'データーを表示 End Sub
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.