VB.Net/Data Structure/CompareTo
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