2012-04-13 73 views
1

我需要一些代码进行排序,而是在一个陌生的方式排序的客户订单

我需要在一个非正常的顺序排序,我需要在40年代第一个排序,那么50年代,90年代,70年代, 80s,60s,20s,30s,10s,00s。

这是什么最好的方法呢?

这是一个在C#.NET 3.5

+0

什么是排序背后的规则? – digEmAll 2012-04-13 16:29:55

+0

它们是表示产品类型的代码,这是他们希望在此报告中分类的顺序。 – CaffGeek 2012-04-13 16:31:38

回答

3

您通常可以提供一个自定义的方法来进行排序(无论是一种方法或保存这些值的有序集合类。

或者,你问这个方法里面的算法应该是什么?

对于算法,您可以使用以下方法:

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(),但这应该把你在正确的方向

+0

该算法,我正在寻找一种简单的方法来排序在这个奇怪的顺序。 – CaffGeek 2012-04-13 16:24:37

+0

更新中的代码是否有帮助? – Attila 2012-04-13 16:32:44

+0

它确实,是的...我会告诉你我想出了什么 – CaffGeek 2012-04-13 16:35:35

3

大多数排序方法可以采取IComparer对象,所以如果你能写,它有两个项目,也可以说,这是第一位的方法,你可以排序使用比较器的方法。

0

我结束了使用此

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; 
    } 
}