VB.Net/Data Structure/CompareTo — различия между версиями
Admin (обсуждение | вклад) м (1 версия) |
|
(нет различий)
|
Версия 19:40, 26 мая 2010
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>