VB.Net/Data Structure/CompareTo

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

Define Comparable Object and Sort them

Imports System
Public Class MainClass
  Shared Sub Main()
    Dim e1 As New Employee("E1", 50000)
    Dim e2 As New Employee("E2", 60000)
    Dim e3 As New Employee("E3", 20000)
    Dim e4 As New Employee("E4", 1)
    Dim theEmployees() As Employee = {e1, e2, e3, e4}
    
    Array.Sort(theEmployees) "call the CompareTo 
    
    Dim aEmployee As Employee
    For Each aEmployee In theEmployees
      Console.WriteLine(aEmployee.TheName & " has yearly salary $" & FormatNumber(aEmployee.Salary))
    Next
  End Sub
End Class
Public Class Employee
  Implements IComparable
  Private m_Name As String
  Private m_Salary As Decimal
  Public Sub New(ByVal theName As String, ByVal curSalary As Decimal)
    m_Name = TheName
    m_Salary = curSalary
  End Sub
  Public Function CompareTo(ByVal AnEmployee As Object) As Integer _
  Implements IComparable.rupareTo
    If CType(AnEmployee, Employee).Salary < Me.Salary Then
      Return -1
    ElseIf CType(AnEmployee, Employee).Salary = Me.Salary Then
      Return 0
    ElseIf CType(AnEmployee, Employee).Salary > Me.Salary Then
      Return 1
    End If
  End Function
  Public ReadOnly Property TheName() As String
    Get
      Return m_Name
    End Get
  End Property
  Public ReadOnly Property Salary() As Decimal
    Get
      Return MyClass.m_Salary
    End Get
  End Property
End Class


Use IComparer to sort by different properties

Imports System
Imports System.Collections

Public Class MainClass
  Shared Sub Main()
    Dim e1 As New Employee("E1", 50000)
    Dim e2 As New Employee("E2", 60000)
    Dim e3 As New Employee("E3", 20000)
    Dim e4 As New Employee("E4", 1)
    Dim theEmployees() As Employee = {e1, e2, e3, e4}
    
    Array.Sort(theEmployees)
    
    Console.WriteLine("Sort by Salary")
    
    Dim SortingByName As SortByName = New SortByName()
    Dim aEmployee As Employee

    For Each aEmployee In theEmployees
      Console.WriteLine(aEmployee.TheName & " has yearly salary $" & FormatNumber(aEmployee.Salary))
    Next
    Console.WriteLine("Sort by Name")
    Array.Sort(theEmployees, SortingByName)
    
    
    For Each aEmployee In theEmployees
      Console.WriteLine(aEmployee.TheName & " has yearly salary $" & FormatNumber(aEmployee.Salary))
    Next
  End Sub
End Class

Public Class SortByName
  Implements IComparer
  Public Function CompareTo(ByVal firstEmp As Object, ByVal _
  secondEmp As Object) As Integer Implements IComparer.rupare
    Dim temp1 As Employee = CType(firstEmp, Employee)
    Dim temp2 As Employee = CType(secondEmp, Employee)
    Return String.rupare(temp1.TheName, temp2.TheName)
  End Function
End Class
Public Class Employee
  Implements IComparable
  Private m_Name As String
  Private m_Salary As Decimal
  Public Sub New(ByVal theName As String, ByVal curSalary As Decimal)
    m_Name = theName
    m_Salary = curSalary
  End Sub
  Public Function CompareTo(ByVal AnEmployee As Object) As Integer _
  Implements IComparable.rupareTo
    If CType(AnEmployee, Employee).Salary < Me.Salary Then
      Return -1
    ElseIf CType(AnEmployee, Employee).Salary = Me.Salary Then
      Return 0
    ElseIf CType(AnEmployee, Employee).Salary > Me.Salary Then
      Return 1
    End If
  End Function
  Public ReadOnly Property TheName() As String
    Get
      Return m_Name
    End Get
  End Property
  Public ReadOnly Property Salary() As Decimal
    Get
      Return MyClass.m_Salary
    End Get
  End Property
End Class