Иллюстрированный самоучитель по Visual Basic .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.

Иллюстрированный самоучитель по Visual Basic .NET › Наследование и интерфейсы › Интерфейс IComparer
Рис. 5.10. Сортировка по нескольким критериям с использованием IComparer

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

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.