2012-04-13 12 views
1

に並べ替え、私は最初の40代をソートする必要がある、50年代、90年代、70年代、 80s、60s、20s、30s、10s、00sである。私はいくつかのコードをソートする必要がありますが、奇妙なやり方</p> <p>に私は非正規の順序でソートする必要があるカスタムオーダー

これについてはどのような方法が最適ですか?それは、C#.NETで3.5

+0

を使用して終了? – digEmAll

+0

これは製品の種類を示すコードで、このレポートで並べ替える順序です。 – CaffGeek

答えて

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

+0

更新のコードはどうすればよいですか? – Attila

+0

それは、はい...私はあなたに私が思いつくものを見せます – CaffGeek

3

ほとんどのソート方法です

IComparerオブジェクトを取ることができますので、あなたは、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; 
    } 
} 
関連する問題