Иллюстрированный самоучитель по VB.NET

       

Интерфейс IComparer


.NET Framework позволяет выполнять сортировку по нескольким критериям. Например, чтобы упорядочить массив работников сначала по заработной плате, а затем по имени (в группах с одинаковой зарплатой) следует реализовать интерфейс IComparer, содержащий единственный метод СотрагеТо. При этом вы сможете воспользоваться одной из перегруженных версий Array. Sort (или ArrayList. Sort), которая имеет следующую сигнатуру:

Public Shared Sub Sort(ByVal array As Array. ByVal comparer As IComparer)

Обычно в программе создается отдельный класс, реализующий IComparer, и экземпляр этого класса передается методу Sort. Пример такого класса приведен ниже. Обратите внимание на выделенную строку — в ней имена работников передаются в виде строк методу Compare класса String:

Public Class SortByName

Implements IComparer

Public Function CompareTo(ByVal firstEmp As Object.ByVal

secondEmp=As Object) As Integer Implements IComparer.Compare

Dim temp1 As Employee = CType(firstEmp,Employee)

Dim temp2 As Employee = CType(secondEmp.Employee)

Return

String.Compare(templ.TheName. temp2.TheName)

End Function

End Class



Пример процедуры Sub Main с использованием этого класса:

SubMain()

Dim torn As New Employee("Tom", 50000)

Dim sally As New Employee("Sally". 60000)

Dim sam As New Employee("Sam". 60000)

Dim ted As New Employee("Ted". 50000)

Dim theEmployees() As Employee = _

{torn.sally,sam.ted}

Array.Sort(theEmployees)

Dim SortingByName As SortByName = New SortByName()

Array.Sort(theEmployees,SortingByName)

Dim aEmployee As Employee

For Each aEmployee In theEmployees

Console.WriteLine(aEmployee.TheName & "has yearly salary $" &

FormatNumberCaEmployee.Salary))

Next

Console. ReadLine() End Sub .

Результат показан на рис. 5.10,

Рис. 5.10. Сортировка по нескольким критериям с использованием IComparer

В программе можно определить несколько классов, реализующих IComparer. Их последовательное применение позволяет выполнять многоуровневую сортировку произвольной глубины.



Содержание раздела