У меня есть метод пузырьковой сортировки, который я хочу передать другому классу, который наследует интерфейс IComarer <Object>, чтобы создать новый метод сортировки - PullRequest
0 голосов
/ 30 ноября 2018

так что у меня есть класс «результаты», содержащий информацию об информации о пакетах и ​​информации о покупателе.каждый покупатель хранит свою улицу и номер дома.

public Person(int id, String name, String street, int housenumber, String, postalcode, String city)

над конструктором человека.

public Deliverable(int id, int weight, Person buyer)

над конструктором результата.

У меня естьдругой класс для хранения результатов и персон

public TransportCompany(){
this.myPersons = new List<Person>();
this.myDeliverables = new List<Deliverable>();
}

Итак, у меня есть метод сортировки myDeliverables, используя метод сортировки Bubble, чтобы отсортировать список по возрастанию по названию улицы, если совпадают имена и по возрастаниюдомов, что нечетно, то в порядке убывания четных номеров домов.Вот пример:

-Id: 3, вес: 360, должен быть доставлен по адресу: RedNex - AAstraat 166 - 5688BX Эйндховен.

-Id: 2, вес: 700, должно бытьдоставлено по адресу: Адель - Керкстраат 13 - Эйндховен 5688DE.

-Id: 4, вес: 360, должно быть доставлено по адресу: Бруно Марс - Керкстраат 39 - 5688DE Эйндховен.

-Ид: 6, вес: 900, должны быть доставлены по адресу: Irene Wust - Kerkstraat 20 - 5693DE Эйндховен.

-Id: 12, вес: 30, должны быть доставлены по адресу: Anouk - Kerkstraat 10 - 5693DE Eindhoven.

это текущий метод, который я использую:

public void SortForPostman()
 {
 sortedlist = Deliverables.ToList();
 sortedlist1 = Deliverables.ToList();

 int N = sortedlist.Count;

 //Select the odd house numbers
 foreach (Deliverable s in sortedlist.ToList())
 {
 if (s.Buyer.Housenumber % 2 == 0)
 {
 sortedlist.Remove(s);

 }
 }
 oddsortedlist= sortedlist;


 //Select the even house numbers
 foreach (Deliverable s in sortedlist1.ToList())
 {
 if (s.Buyer.Housenumber % 2 != 0)
 {
 sortedlist1.Remove(s);

 }
 }

 evensortedlist = sortedlist1;



 int f, d;

 N = oddsortedlist.Count;
 //filter the odd numbered list
 for (d = N - 1; d > 0; d--)
 {
 for (f = 0; f < d; f++)
 {
 if (string.Compare((oddsortedlist[f].Buyer.Street), 
 (oddsortedlist[f + 1].Buyer.Street)) == 0)
 {
 if (oddsortedlist[f].Buyer.Housenumber > oddsortedlist[f 
 + 1].Buyer.Housenumber)

 {
 swapodd(f, f + 1);
 }
 }
 else if (string.Compare((oddsortedlist[f].Buyer.Street), 
 (oddsortedlist[f + 1].Buyer.Street)) > 0)
 {
 swapodd(f, f + 1);
 }
 }
 } 

 int q, w;
 N = evensortedlist.Count;

 for (w = N - 1; w > 0; w--)
 {
 for (q = 0; q < w; q++)
 {
 if (string.Compare((evensortedlist[q].Buyer.Street), 
 (evensortedlist[q + 1].Buyer.Street)) == 0)
 {
 if (evensortedlist[q].Buyer.Housenumber < 
 evensortedlist[q + 1].Buyer.Housenumber)

 {
 swapeven(q, q + 1);
 }
 }
 else if (string.Compare((evensortedlist[q].Buyer.Street), (evensortedlist[q + 1].Buyer.Street)) > 0)
 {
 swapeven(q, q + 1);
 }
 }
 }
 sortedlist = oddsortedlist.ToList();
 sortedlist.AddRange(evensortedlist.ToList());


 int x, j;

 N = sortedlist.Count;

 for (j = N - 1; j > 0; j--)
 {
 for (x = 0; x < j; x++)
 {
 if (string.Compare((sortedlist[x].Buyer.Street), (sortedlist[x + 1].Buyer.Street)) > 0)
 {
 swapdeliverable(x, x + 1);
 }
 }
 }


 }

 public void swapdeliverable(int m, int n)
 {
 Deliverable temporary;

 temporary = sortedlist[m];
 sortedlist[m] = sortedlist[n];
 sortedlist[n] = temporary;
 }

 public void swapodd(int m, int n)
 {
 Deliverable temporary;

 temporary = oddsortedlist[m];
 oddsortedlist[m] = oddsortedlist[n];
 oddsortedlist[n] = temporary;
 }
 public void swapeven(int m, int n)
 {
 Deliverable temporary;

 te tomporary = evensortedlist[m];
 evensortedlist[m] = evensortedlist[n];
 evensortedlist[n] = temporary;
 }

Так что теперь я хочу перенести этот метод в объект IComparer <>

namespace Deliveries
 {
 class PostmanSort : IComparer<Deliverable>
 {
 public int Compare(Deliverable x, Deliverable y)
 {
 return // The method here 
 }
 }}

и вместо использованияпредыдущий метод мне нужно это

 public void SortForPostman()
 {
 PostmanSort niceway= new PostmanSort();
 TheList.Sort(niceway);
 }
...