VB.Net/Data Structure/CompareTo

Материал из VB Эксперт
Версия от 15:45, 26 мая 2010; Admin (обсуждение | вклад) (1 версия)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Define Comparable Object and Sort them

<source lang="vbnet"> 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


      </source>


Use IComparer to sort by different properties

<source lang="vbnet"> 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

      </source>