いくつかのコードを並べ替える必要がありますが、奇妙な方法で
通常とは異なる順序で並べ替える必要があります。最初に 40 代を並べ替え、次に 50 代、90 代、70 代、80 代、60 代、20 代、30 代、10 代、00 代の順に並べ替える必要があります。
これについて最善の方法は何ですか?
それはC#.net 3.5にあります
ほとんどの並べ替えメソッドはIComparer
オブジェクトを受け取ることができるため、2 つの項目を受け取り、どちらが先かを判断できるメソッドを作成できれば、その比較メソッドを使用して並べ替えることができます。
通常、並べ替えを行うカスタム メソッドを提供できます (並べ替えメソッドまたはこれらの値を保持する並べ替えられたコレクション クラスのいずれかに)。
または、そのメソッド内のアルゴリズムがどうあるべきかを尋ねていますか?
アルゴリズムには、次の方法を使用できます。
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()
、これは正しい方向に導くはずです
結局これを使いました
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;
}
}