Mega Code Archive
Comparison method based on delegate
Module Module1
Class Employee
Public FirstNme As String
Public LastName As String
Public Title As String
Public Salary As Double
Public Sub New(ByVal LastName As String, ByVal FirstNme As String, _
ByVal Title As String, ByVal Salary As Double)
Me.FirstNme = FirstNme
Me.LastName = LastName
Me.Title = Title
Me.Salary = Salary
End Sub
End Class
Delegate Function Compare(ByVal A As Employee, ByVal B As Employee) As Boolean
Dim CompareMethod As New Compare(AddressOf CompareTitle)
Function CompareTitle(ByVal A As Employee, ByVal B As Employee) As Boolean
If (A.Title < B.Title) Then
CompareTitle = False
Else
CompareTitle = True
End If
End Function
Function CompareLastName(ByVal A As Employee, ByVal B As Employee) As Boolean
If (A.LastName < B.LastName) Then
CompareLastName = False
Else
CompareLastName = True
End If
End Function
Function CompareSalary(ByVal A As Employee, ByVal B As Employee) As Boolean
If (A.Salary < B.Salary) Then
CompareSalary = False
Else
CompareSalary = True
End If
End Function
Public Sub SortList(ByVal Employeelist() As Employee)
Dim I, J As Integer
Dim Temp As Employee
For I = 0 To Employeelist.Length - 2
For J = I + 1 To Employeelist.Length - 1
If (CompareMethod(Employeelist(I), Employeelist(J))) Then
Temp = Employeelist(I)
Employeelist(I) = Employeelist(J)
Employeelist(J) = Temp
End If
Next
Next
End Sub
Sub Main()
Dim EmployeeList(3) As Employee
EmployeeList(0) = New Employee("A","Z", "W", 49.99)
EmployeeList(1) = New Employee("Z","A", "J", 49.99)
EmployeeList(2) = New Employee("B", "X", "K", 49.99)
EmployeeList(3) = New Employee("P","O", "A", 39.99)
SortList(EmployeeList)
Console.WriteLine("By Title")
Dim EmployeeEntry As Employee
For Each EmployeeEntry In EmployeeList
Console.WriteLine(EmployeeEntry.LastName & " " & EmployeeEntry.Title & " " & EmployeeEntry.Salary)
Next
Console.WriteLine("By LastName")
CompareMethod = AddressOf CompareLastName
SortList(EmployeeList)
For Each EmployeeEntry In EmployeeList
Console.WriteLine(EmployeeEntry.LastName & " " & EmployeeEntry.Title & " " & EmployeeEntry.Salary)
Next
Console.WriteLine("By Salary")
CompareMethod = AddressOf CompareSalary
SortList(EmployeeList)
For Each EmployeeEntry In EmployeeList
Console.WriteLine(EmployeeEntry.LastName & " " & EmployeeEntry.Title & " " & EmployeeEntry.Salary)
Next
End Sub
End Module
By Title
P A 39.99
Z J 49.99
B K 49.99
A W 49.99
By LastName
A W 49.99
B K 49.99
P A 39.99
Z J 49.99
By Salary
P A 39.99
Z J 49.99
B K 49.99
A W 49.99