2011-01-18 23 views
0

私はキーがアルファベット以外の方法でソートされてソートされた辞書を作成する方法を把握しようとしています。私がそれを並べ替える方法を定義する方法はありますか?ソート辞書 - C#

は例えば、キーは次のように順番になっている可能性があり、次の

AAA1X 
AAB1Y 
AAC1Y 
AAA2X 
AAB2Y 
AAC2X 

最初の3つの文字はアルファベット順ですが、私は一種としてであれば、それが原因の数に(間違った順序でそれらをひとまとめます)。また、最後にXまたはYがあることにも注意してください。コードでは、XまたはYのみが存在します。

すべての可能な組み合わせを並べ替えるための列挙を書くことはできますが、それもやりたいと思いますが、わかりませんどのように私は、私は、これは少し曖昧ですけど、任意のヘルプははるかに高く評価されるだろう...

をソートされた辞書と列挙体を使用することができます!

乾杯!

+1

あなたはIDictionaryを自分で実装することができ、ソートしかし、あなたが欲しいです。何かを(オペレータが多型ではないとして、あなたは*オーバーロード*演算子は、* *オーバーライドすることはできませんのでご注意)行うことはありません '=='演算子のオーバーロード – Will

答えて

14

SortedDictionary<TKey, TValue>のコンストラクタの1つは、IComparer<TKey>です。辞書で並べ替えに使用するカスタムの比較クラスを指定できます。

public class CustomComparer : IComparer<string> 
{ 
    public int Compare(string x, string y) 
    { 
     // do your own comparison however you like; return a negative value 
     // to indicate that x < y, a positive value to indicate that x > y, 
     // or 0 to indicate that they are equal. 
    } 
} 

... 

SortedDictionary<string, object> dict = 
       new SortedDictionary<string, object>(new CustomComparer()); 
0

次のことが可能です。

これらのキーをカプセル化し、==演算子、Object.Equals方法とObject.GetHashCodeメソッドをオーバーライドしたクラスを作成します。クラスがIComparableインターフェースを実装するようにして、等価ルールが自動的に正しいキーをソートするようにします。今、あなたは、単にSortedDictionaryまたはSortedListでこれらのキーを配置することができ、それは自動的にあなたが望むようにソートされます。

OR

これらの文字列にあなたが望む方法を比較しIComparerオブジェクトを実装し、SortedDictionaryまたはSortedListを構築する際のIComparerを指定します。

+0

。 –

+0

実際には、SortedDictionary/SortedListはGetHashCode/Equalsメソッドを使用しません。ソートされて、あなたのオブジェクトができるようにするために、それはあなたが専門用語の正しいだ 'IComparableを' – digEmAll

+0

を実装する必要があります。私は元の答えを編集しました。最初のアプローチでは、カプセル化クラスはIComparable インターフェイスを実装する必要があります。もしkeynesiancrossがその地域に進出しているならば、徹底的でEqualsとGetHashCodeを上書きするのが良いでしょう。彼は包括的なクラスが文字列のように動作することを望んでいるので、==をオーバーロードする必要があります。 obj_a == obj_bであり、それらが同じ文字列コンテンツを有する場合には、obj_a == obj_bである。 – tenor