так что у меня есть класс «результаты», содержащий информацию об информации о пакетах и информации о покупателе.каждый покупатель хранит свою улицу и номер дома.
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);
}