TizzyT

Trie(Of T) -TizzyT

May 22nd, 2018
270
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VB.NET 2.41 KB | None | 0 0
  1. Public Class Trie(Of T)
  2.     Private Node As New TrieNode(Of T)
  3.     Private Class TrieNode(Of U)
  4.         Public Item As U = Nothing
  5.         Public Values() As TrieNode(Of T)
  6.         Public Shared Widening Operator CType(ByVal U As TrieNode(Of U)) As U
  7.             Return U.Item
  8.         End Operator
  9.     End Class
  10.     Default Public Property Item(ByVal Keys As String()) As T
  11.         Get
  12.             Dim ph As TrieNode(Of T) = Node
  13.             For Each str As String In Keys
  14.                 ph = ph.Values(0)
  15.                 For i = 0 To str.Length - 1
  16.                     ph = ph.Values(AscW(str(i)) - 96)
  17.                 Next
  18.             Next
  19.             Return ph.Item
  20.         End Get
  21.         Set(Value As T)
  22.             Dim ph As TrieNode(Of T) = Node
  23.             For Each str As String In Keys
  24.                 If ph.Values Is Nothing Then
  25.                     ph.Values = New TrieNode(Of T)(26) {}
  26.                     ph.Values(0) = New TrieNode(Of T)
  27.                 Else
  28.                     If ph.Values(0) Is Nothing Then ph.Values(0) = New TrieNode(Of T)
  29.                 End If
  30.                 ph = ph.Values(0)
  31.                 For i = 0 To str.Length - 1
  32.                     Dim v As Integer = AscW(str(i)) - 96
  33.                     If ph.Values Is Nothing Then
  34.                         ph.Values = New TrieNode(Of T)(26) {}
  35.                         ph.Values(v) = New TrieNode(Of T)
  36.                     Else
  37.                         If ph.Values(v) Is Nothing Then ph.Values(v) = New TrieNode(Of T)
  38.                     End If
  39.                     ph = ph.Values(v)
  40.                 Next
  41.             Next
  42.             ph.Item = Value
  43.         End Set
  44.     End Property
  45.     Public Function TryGet(ByRef Result As T, ParamArray ByVal Keys As String()) As Boolean
  46.         Try
  47.             Dim ph As TrieNode(Of T) = Node
  48.             If Keys.Length = 1 Then
  49.                 Dim firstKey As String = Keys(0)
  50.                 For i = 0 To firstKey.Length - 1
  51.                     ph = ph.Values(AscW(firstKey(i)) - 96)
  52.                 Next
  53.             Else
  54.                 For Each str As String In Keys
  55.                     For i = 0 To str.Length - 1
  56.                         ph = ph.Values(AscW(str(i)) - 96)
  57.                     Next
  58.                 Next
  59.             End If
  60.             Result = ph.Item
  61.             Return True
  62.         Catch
  63.             Return False
  64.         End Try
  65.     End Function
  66. End Class
Advertisement
Add Comment
Please, Sign In to add comment