に並べ替え、私は最初の40代をソートする必要がある、50年代、90年代、70年代、 80s、60s、20s、30s、10s、00sである。私はいくつかのコードをソートする必要がありますが、奇妙なやり方</p> <p>に私は非正規の順序でソートする必要があるカスタムオーダー
これについてはどのような方法が最適ですか?それは、C#.NETで3.5
に並べ替え、私は最初の40代をソートする必要がある、50年代、90年代、70年代、 80s、60s、20s、30s、10s、00sである。私はいくつかのコードをソートする必要がありますが、奇妙なやり方</p> <p>に私は非正規の順序でソートする必要があるカスタムオーダー
これについてはどのような方法が最適ですか?それは、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
オブジェクトを取ることができますので、あなたは、2つのアイテムを取り、最初に来るこれを言うことができる方法を書くことができるならば、あなたはその比較演算の方法を使用して並べ替えることができます。
私はそのソートの背後にあるルールは何この
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
これは製品の種類を示すコードで、このレポートで並べ替える順序です。 – CaffGeek