因此,我有一个“可交付成果”类,其中包含有关包裹信息和买方信息的信息。 每个买家都有他的街道和门牌号。
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>();
}
因此,我有一种使用Bubble排序方法对myDeliverables进行排序的方法,即按照街道名称的升序(如果名称相同,然后按房屋的升序(奇数)然后按偶数房子的降序)对列表进行排序数字。 这是一个示例:
-Id:3,重量:360,应在以下地址提供:RedNex-AAstraat 166-5688BX埃因霍温。
-Id:2,体重:700,应在以下地址提供:Adele-Kerkstraat 13-5688DE Eindhoven。
-Id:4,体重:360,应该在以下地点提供:布鲁诺·马尔斯(Bruno Mars)-Kerkstraat 39-5688DE埃因霍温。
-Id:6,体重:900,应在以下地点运送:艾琳·韦斯特-埃克霍芬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);
}