我需要一些代碼進行排序,而是在一個陌生的方式排序的客戶訂單
我需要在一個非正常的順序排序,我需要在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