我需要一些代码进行排序,而是在一个陌生的方式排序的客户订单
我需要在一个非正常的顺序排序,我需要在40年代第一个排序,那么50年代,90年代,70年代, 80s,60s,20s,30s,10s,00s。
这是什么最好的方法呢?
这是一个在C#.NET 3.5
我需要一些代码进行排序,而是在一个陌生的方式排序的客户订单
我需要在一个非正常的顺序排序,我需要在40年代第一个排序,那么50年代,90年代,70年代, 80s,60s,20s,30s,10s,00s。
这是什么最好的方法呢?
这是一个在C#.NET 3.5
您通常可以提供一个自定义的方法来进行排序(无论是一种方法或保存这些值的有序集合类。
或者,你问这个方法里面的算法应该是什么?
对于算法,您可以使用以下方法:
int getFirstOrder(int v) {
if (50 <= v && v <= 59) {
return 1;
} else if (90 <= v && v <= 99) {
return 2;
}
// and so on
}
int Compare (int v1, int v2)
{
int o1 = getFirstOrder(v1);
int o2 = getFirstOrder(v2);
if (o1 < o2 || (o1 == o2 && v1 < v2)) {
return -1;
} else if (o1 > o2 || (o1 == o2 && v1 > v2)) {
return 1;
} else {
return 0;
}
}
我敢肯定有一个更有效的方法(尤其是getFirstOrder()
,但这应该把你在正确的方向
大多数排序方法可以采取IComparer
对象,所以如果你能写,它有两个项目,也可以说,这是第一位的方法,你可以排序使用比较器的方法。
我结束了使用此
private class CodeComparer : IComparer<Code>
{
public int Compare(Code x, Code y)
{
var order = "4597862310";
var bodyStyleX = x.Substring(6, 2);
var bodyStyleY = y.Substring(6, 2);
// Same body style group
if (bodyStyleX[0].Equals(bodyStyleY[0]))
return string.Compare(bodyStyleX, bodyStyleY, true);
var indexX = order.IndexOf(bodyStyleX[0]);
var indexY = order.IndexOf(bodyStyleY[0]);
return indexX < indexY ? -1 : 1;
}
}
什么是排序背后的规则? – digEmAll 2012-04-13 16:29:55
它们是表示产品类型的代码,这是他们希望在此报告中分类的顺序。 – CaffGeek 2012-04-13 16:31:38