Использование стандартных интерфейсов - C#
Формулировка задачи:
Создать собственный класс, обладающий строковыми и числовыми свойствами (например, имя и возраст для человека).
Обеспечить возможность использования метода Sort() для сортировки элементов массива объектов данного класса следующими двумя способами:
1) сортировка объектов данного класса по их строковому представлению посредством реализации метода CompareTo() интерфейса IComparable;
2) сортировка в обратном порядке объектов данного класса по одному или нескольким числовым свойствам (можно использовать их комбинацию, в том числе и со строковыми свойствами) посредством объявления дополнительного класса SortTest, реализующего метод Compare() интерфейса IComparer.
Продемонстрировать в программе работу метода Sort() обоими способами.
Не понимаю что с классом SortTest делать и как с его помощью отсортировать мне?..
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
class Program
{
public class human : IComparable<human>
{
public string name;
public int age;
public int height;
public int CompareTo(human obj)
{
if (this.name.CompareTo(obj.name) > 0)
return 1;
if (this.name.CompareTo(obj.name) < 0)
return -1;
else
return 0;
}
public human(string n, int a, int h)
{ name = n; age = a; height = h; }
}
public class SortTest : IComparer<human>
{
public int Compare(human x, human y)
{
if (x.age < y.age)
return 1;
if (x.age > y.age)
return -1;
else return 0;
}
}
public static human[] Sort(human[] people)
{
human[] mass = people;
int num_change = 0;
do
{
num_change = 0;
for (int i = 0; i < mass.Length - 1; i++)
if (mass[i].CompareTo(mass[i + 1]) > 0)
{
human h = mass[i];
mass[i] = mass[i + 1];
mass[i + 1] = h;
num_change++;
}
} while (num_change != 0);
return mass;
}
//public static human[] SortReverse(human[] people)
//{
// human[] mass = people;
// int num_change = 0;
// do
// {
// num_change = 0;
// for (int i = 0; i < mass.Length - 1; i++)
// if (mass[i].Compare(mass[i + 1]) > 0)
// {
// human h = mass[i];
// mass[i] = mass[i + 1];
// mass[i + 1] = h;
// num_change++;
// }
// } while (num_change != 0);
// return mass;
//}
static void Main(string[] args)
{
human[] people = new human[5];
people[0] = new human("C", 30, 170);
people[1] = new human("D", 40, 180);
people[2] = new human("B", 20, 160);
people[3] = new human("E", 50, 190);
people[4] = new human("A", 10, 150);
foreach (human hum in people)
Console.WriteLine(hum.name + " " + hum.age + " " + hum.height);
people = Sort(people);
Console.WriteLine("------------------");
foreach (human hum in people)
Console.WriteLine(hum.name + " " + hum.age + " " + hum.height);
}
}
}Решение задачи: «Использование стандартных интерфейсов»
textual
Листинг программы
public static human[] Sort(human[] people)
{
Array.Sort(people, new SortTest());
return people;
}