VB.Net/Data Structure/List Yours

Материал из VB Эксперт
Перейти к: навигация, поиск

Add Item to Most Recent Used Item List

Imports System
Imports System.Windows.Forms
Imports System.Collections.Generic
Imports System.ruponentModel
Public Class MainClass
   Shared Sub Main()
       Dim the_items As New MostRecentList(Of String)(4)
       the_items.Add("A")
       the_items.Add("B")
       the_items.Add("C")
       the_items.Add("D")
       the_items.Add("D")
       the_items.Add("B")
       the_items.Add("F")
       For i As Integer = 0 To the_items.Count - 1
            Console.WriteLine(the_items.Item(i))
       Next i
   End Sub 
End Class

Public Class MostRecentList(Of ItemType)
    Public Sub New(ByVal max_items As Integer)
        MaxItems = max_items
    End Sub
    Private m_Items As New List(Of ItemType)
    <Description("The items."), _
     Category("Data")> _
    Public Property Item(ByVal index As Integer) As ItemType
        Get
            Return m_Items(index)
        End Get
        Set(ByVal value As ItemType)
            m_Items(index) = value
        End Set
    End Property
    Private m_MaxItems As Integer = 4
    <Description("The maximum number of items in the list."), _
     Category("Data")> _
    Public Property MaxItems() As Integer
        Get
            Return m_MaxItems
        End Get
        Set(ByVal value As Integer)
            m_MaxItems = value
            Do While m_Items.Count > m_MaxItems
                m_Items.RemoveAt(m_Items.Count - 1)
            Loop
        End Set
    End Property
    <Description("The current number of items."), _
     Category("Data")> _
    Public ReadOnly Property Count() As Integer
        Get
            Return m_Items.Count
        End Get
    End Property
    Public Sub Add(ByVal value As ItemType)
        If m_Items.Contains(value) Then m_Items.Remove(value)
        m_Items.Insert(0, value)
        If m_Items.Count > m_MaxItems Then m_Items.RemoveAt(m_Items.Count - 1)
    End Sub
    Public Sub Remove(ByVal value As ItemType)
        m_Items.Remove(value)
    End Sub
    Public Sub RemoveAt(ByVal index As Integer)
        m_Items.RemoveAt(index)
    End Sub
End Class


Change the Max Item Count Allowed Property in Most Recent Used Item List

Imports System
Imports System.Windows.Forms
Imports System.Collections.Generic
Imports System.ruponentModel
Public Class MainClass
   Shared Sub Main()
       Dim the_items As New MostRecentList(Of String)(4)
       the_items.Add("A")
       the_items.Add("B")
       the_items.Add("C")
       the_items.Add("D")
       the_items.Add("D")
       the_items.Add("B")
       the_items.Add("F")
       For i As Integer = 0 To the_items.Count - 1
            Console.WriteLine(the_items.Item(i))
       Next i
       the_items.MaxItems = 2
       Console.WriteLine()
       For i As Integer = 0 To the_items.Count - 1
            Console.WriteLine(the_items.Item(i))
       Next i

   End Sub 
End Class

Public Class MostRecentList(Of ItemType)
    Public Sub New(ByVal max_items As Integer)
        MaxItems = max_items
    End Sub
    Private m_Items As New List(Of ItemType)
    <Description("The items."), _
     Category("Data")> _
    Public Property Item(ByVal index As Integer) As ItemType
        Get
            Return m_Items(index)
        End Get
        Set(ByVal value As ItemType)
            m_Items(index) = value
        End Set
    End Property
    Private m_MaxItems As Integer = 4
    <Description("The maximum number of items in the list."), _
     Category("Data")> _
    Public Property MaxItems() As Integer
        Get
            Return m_MaxItems
        End Get
        Set(ByVal value As Integer)
            m_MaxItems = value
            Do While m_Items.Count > m_MaxItems
                m_Items.RemoveAt(m_Items.Count - 1)
            Loop
        End Set
    End Property
    <Description("The current number of items."), _
     Category("Data")> _
    Public ReadOnly Property Count() As Integer
        Get
            Return m_Items.Count
        End Get
    End Property
    Public Sub Add(ByVal value As ItemType)
        If m_Items.Contains(value) Then m_Items.Remove(value)
        m_Items.Insert(0, value)
        If m_Items.Count > m_MaxItems Then m_Items.RemoveAt(m_Items.Count - 1)
    End Sub
    Public Sub Remove(ByVal value As ItemType)
        m_Items.Remove(value)
    End Sub
    Public Sub RemoveAt(ByVal index As Integer)
        m_Items.RemoveAt(index)
    End Sub
End Class


Remove Item from Most Recent Used Item List

Imports System
Imports System.Windows.Forms
Imports System.Collections.Generic
Imports System.ruponentModel
Public Class MainClass
   Shared Sub Main()
       Dim the_items As New MostRecentList(Of String)(4)
       the_items.Add("A")
       the_items.Add("B")
       the_items.Add("C")
       the_items.Add("D")
       the_items.Add("D")
       the_items.Add("B")
       the_items.Add("F")
       For i As Integer = 0 To the_items.Count - 1
            Console.WriteLine(the_items.Item(i))
       Next i
       the_items.Remove("F")
       Console.WriteLine()
       For i As Integer = 0 To the_items.Count - 1
            Console.WriteLine(the_items.Item(i))
       Next i

   End Sub 
End Class

Public Class MostRecentList(Of ItemType)
    Public Sub New(ByVal max_items As Integer)
        MaxItems = max_items
    End Sub
    Private m_Items As New List(Of ItemType)
    <Description("The items."), _
     Category("Data")> _
    Public Property Item(ByVal index As Integer) As ItemType
        Get
            Return m_Items(index)
        End Get
        Set(ByVal value As ItemType)
            m_Items(index) = value
        End Set
    End Property
    Private m_MaxItems As Integer = 4
    <Description("The maximum number of items in the list."), _
     Category("Data")> _
    Public Property MaxItems() As Integer
        Get
            Return m_MaxItems
        End Get
        Set(ByVal value As Integer)
            m_MaxItems = value
            Do While m_Items.Count > m_MaxItems
                m_Items.RemoveAt(m_Items.Count - 1)
            Loop
        End Set
    End Property
    <Description("The current number of items."), _
     Category("Data")> _
    Public ReadOnly Property Count() As Integer
        Get
            Return m_Items.Count
        End Get
    End Property
    Public Sub Add(ByVal value As ItemType)
        If m_Items.Contains(value) Then m_Items.Remove(value)
        m_Items.Insert(0, value)
        If m_Items.Count > m_MaxItems Then m_Items.RemoveAt(m_Items.Count - 1)
    End Sub
    Public Sub Remove(ByVal value As ItemType)
        m_Items.Remove(value)
    End Sub
    Public Sub RemoveAt(ByVal index As Integer)
        m_Items.RemoveAt(index)
    End Sub
End Class


Store Object in Most Recent Used Item List

Imports System
Imports System.Windows.Forms
Imports System.Collections.Generic
Imports System.ruponentModel
Public Class MainClass
   Shared Sub Main()
       Dim the_items As New MostRecentList(Of DataItem)(4)
       Dim new_data As New DataItem
       new_data.Text = "A"
       the_items.Add(new_data)       
       new_data = new DataItem
       new_data.Text = "B"
       the_items.Add(new_data)       
       
       For i As Integer = 0 To the_items.Count - 1
            Console.WriteLine(the_items.Item(i).Text)
       Next i

   End Sub 
End Class

Public Class MostRecentList(Of ItemType As IComparable)
    " Initialize MaxItems for the new list.
    Public Sub New(ByVal max_items As Integer)
        MaxItems = max_items
    End Sub
    " The Item property.
    Private m_Items As New List(Of ItemType)
    <Description("The items."), _
     Category("Data")> _
    Public Property Item(ByVal index As Integer) As ItemType
        Get
            Return m_Items(index)
        End Get
        Set(ByVal value As ItemType)
            m_Items(index) = value
        End Set
    End Property
    " The MaxItems property.
    Private m_MaxItems As Integer = 4
    <Description("The maximum number of items in the list."), _
     Category("Data")> _
    Public Property MaxItems() As Integer
        Get
            Return m_MaxItems
        End Get
        Set(ByVal value As Integer)
            m_MaxItems = value
            " Resize appropriately.
            Do While m_Items.Count > m_MaxItems
                m_Items.RemoveAt(m_Items.Count - 1)
            Loop
        End Set
    End Property
    " The current number of items.
    <Description("The current number of items."), _
     Category("Data")> _
    Public ReadOnly Property Count() As Integer
        Get
            Return m_Items.Count
        End Get
    End Property
    " Add an item to the top of the list.
    Public Sub Add(ByVal value As ItemType)
        " Remove the item if it is present.
        Remove(value)
        " Add the item to the top of the list.
        m_Items.Insert(0, value)
        " Make sure there are at most MaxItems items.
        If m_Items.Count > m_MaxItems Then m_Items.RemoveAt(m_Items.Count - 1)
    End Sub
    " Remove an item.
    Public Sub Remove(ByVal value As ItemType)
        " Find the item.
        For i As Integer = m_Items.Count - 1 To 0 Step -1
            If value.rupareTo(m_Items(i)) = 0 Then
                m_Items.RemoveAt(i)
            End If
        Next i
    End Sub
    " Remove an item at a specific position.
    Public Sub RemoveAt(ByVal index As Integer)
        m_Items.RemoveAt(index)
    End Sub
End Class
Public Class DataItem
    Implements IComparable
    Public Text As String
    Public Function CompareTo(ByVal obj As Object) As Integer Implements System.IComparable.rupareTo
        Dim data_item As DataItem = DirectCast(obj, DataItem)
        Return String.rupare(Me.Text, data_item.Text)
    End Function
End Class


Your own List Data structure

Imports System
Public Class MainClass
  Public Shared Sub Main()
      Dim list As List = New List() 
      Dim aBoolean As Boolean = True
      Dim aCharacter As Char = "$"c
      Dim anInteger As Integer = 34
      Dim aString As String = "www.vbex.ru"
      list.InsertAtFront(aBoolean) 
      Console.WriteLine(list)
      list.InsertAtFront(aCharacter)
      Console.WriteLine(list)
      list.InsertAtBack(anInteger) 
      Console.WriteLine(list)
      list.InsertAtBack(aString) 
      Console.WriteLine(list)
      Dim removedObject As Object
      Try
         removedObject = list.RemoveFromFront()
         Console.WriteLine(Convert.ToString(removedObject) & " removed")
         Console.WriteLine(list)
         removedObject = list.RemoveFromFront()
         Console.WriteLine(Convert.ToString(removedObject) & _
            " removed")
         Console.WriteLine(list)
         removedObject = list.RemoveFromBack()
         Console.WriteLine(Convert.ToString(removedObject) & _
            " removed")
         Console.WriteLine(list)
         removedObject = list.RemoveFromBack()
         Console.WriteLine(Convert.ToString(removedObject) & _
            " removed")
         Console.WriteLine(list)
      Catch emptyListException As EmptyListException
         Console.Error.WriteLine(vbCrLf & _
            Convert.ToString(emptyListException))
      End Try
  End Sub
End Class

Public Class List
   Private firstNode As ListNode
   Private lastNode As ListNode
   Private name As String
   Public Sub New(ByVal listName As String)
      name = listName
      firstNode = Nothing
      lastNode = Nothing
   End Sub
   Public Sub New()
      MyClass.New("list")
   End Sub 
   Public Sub InsertAtFront(ByVal insertItem As Object)
      SyncLock (Me)
         If IsEmpty() Then
            lastNode = New ListNode(insertItem)
            firstNode = lastNode
         Else 
            firstNode = New ListNode(insertItem, firstNode)
         End If
      End SyncLock
   End Sub
   Public Sub InsertAtBack(ByVal insertItem As Object)
      SyncLock (Me)
         If IsEmpty() Then
            lastNode = New ListNode(insertItem)
            firstNode = lastNode
         Else 
            lastNode.NextNode = New ListNode(insertItem)
            lastNode = lastNode.NextNode
         End If
      End SyncLock
   End Sub
   Public Function RemoveFromFront() As Object
      SyncLock (Me)
         Dim removeItem As Object = Nothing
         If IsEmpty() Then
            Throw New EmptyListException(name)
         End If
         removeItem = firstNode.Data 
         If firstNode Is lastNode Then
            firstNode = Nothing
            lastNode = Nothing
         Else
            firstNode = firstNode.NextNode
         End If
         
         Return removeItem
      End SyncLock
   End Function
   Public Function RemoveFromBack() As Object
      SyncLock (Me)
         Dim removeItem As Object = Nothing
         If IsEmpty() Then
            Throw New EmptyListException(name)
         End If
         removeItem = lastNode.Data
         If firstNode Is lastNode Then
            lastNode = Nothing
            firstNode = lastNode
         Else
            Dim current As ListNode = firstNode
            While (Not (current.NextNode Is lastNode))
               current = current.NextNode
            End While
            lastNode = current
            current.NextNode = Nothing
         End If
         Return removeItem
      End SyncLock
   End Function
   Public Function IsEmpty() As Boolean
      SyncLock (Me)
         If firstNode Is Nothing Then
            Return True
         Else
            Return False
         End If
      End SyncLock
   End Function
   Public Overrides Function ToString() As String
      Dim str As String = New String("")
      SyncLock (Me)
         If IsEmpty() Then
            Return "Empty " & name
         End If
         str = "The " & name & " is: "
         Dim current As ListNode = firstNode
         While Not current Is Nothing
            str += current.Data & " "
            current = current.NextNode
         End While
         
         Return str
      
      End SyncLock
   End Function
End Class 

Public Class ListNode
   Private mData As Object
   Private mNextNode As ListNode
   Public Sub New(ByVal dataValue As Object)
      MyClass.New(dataValue, Nothing)
   End Sub 
   Public Sub New(ByVal dataValue As Object, _
      ByVal nextNodeValue As Object)
      mData = dataValue
      mNextNode = nextNodeValue
   End Sub 
   Public ReadOnly Property Data() As Object
      Get
         Return mData
      End Get
   End Property
   Public Property NextNode() As ListNode
      Get
         Return mNextNode
      End Get
      Set(ByVal value As ListNode)
         mNextNode = value
      End Set
   End Property
End Class

Public Class EmptyListException
   Inherits ApplicationException
   Public Sub New(ByVal name As String)
      MyBase.New("The " & name & " is empty")
   End Sub 
End Class