我需要对一些代码进行排序,但是以一种奇怪的方式
我需要按非正常顺序排序,我需要先对40s进行排序,然后对50s,90s,70s,80s,60s,20s,30s,10s,00s进行排序。
最好的方法是什么?
它在C#.net 3.5
答案 0 :(得分:3)
大多数排序方法都可以使用IComparer
对象,因此如果您可以编写一个包含两个项目的方法,并且可以说哪个是第一个,则可以使用该比较方法进行排序。
答案 1 :(得分: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()
,但这应该会让你朝着正确的方向前进
答案 2 :(得分: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;
}
}