2009-04-13 9 views
1

構造の違いをチェックするために、2つのデータベーススキーマを比較できる小さなアプリケーションを作成しました。列の詳細に至るまで、それはいいですね。非常に小さなデータベースを比較しても問題はありませんでしたが、何百ものテーブルとデータベースを比較し始めたときに、上下にスクロールしてエラーの場所を見つけるのは面倒です。もともと、私はテーブルのリストを保持するためにKeyedCollectionを使用していましたが、それはどのような種類の並べ替えも許可しないので、その後私はSortedListに変更しました。 SortedListはインデックスをソートしますが、アルファベット順にテーブルが表示されますが、これは必要なものよりも少なくなります。私が必要とするのは、インデックス値だけでなく、オブジェクトのプロパティに基づいてソートできるクラスです。私はエラーのあるテーブルを、使い易いようにリストの先頭にプッシュしたいと思っています。誰かが私がこれを達成するためにどのクラスを使うことができるかという考えを持っていますか?カスタムソート方法を可能にするシーククラス

EDIT1:Listクラスにはインデックスがありません。これは私のクラスにとって非常に重要なものです。 Dictionaryを使ってみましたが、インデックスはありますが、ソート方法はありません。コンストラクタはインデックス型のIComparerのみを受け付けるため、IComparerの実装は機能しません。 IComparerはリストクラスの内部値リストにアクセスできない別のクラスなので、オブジェクトプロパティに基づいて比較することはできません。

EDIT2:インデックス値ではなくオブジェクトプロパティでインデックスをソートするクラスが必要ですが、そのクラスが存在しないと考え始めています。

答えて

0

これを行う簡単な方法はありません。たぶん難しい方法ではないかもしれません。それは出力を行うために使用されることを意図していたので、私は代わりに私が望む結果に達するために部分出力の複数のループを作ることにしました。

0

thisオーバーロードされたコンストラクタを使用してソートされたリストを作成し、希望のソート方法を実装するカスタムIComparerクラスを作成します。

2

次にあなたがにクラスを作成する必要がを実装:System.Collections.Generic.IComparer、そして、あなたは、たとえばたIComparerに基づいてソートをサポートするコレクションに、すべてのオブジェクトを置くことができます。

システム.Collections.Generic.Listでは、独自の実装に基づいてソートを行うことができます。

これを理解するのに役立つ良い例は、linkです。

0

あなたがやろうとしているすべては、独自のソートを作成している場合、これは最も簡単かもしれません:

List<Foo> myFoos = new List<Foo>(); 
//--Write code to fill the list 

//sort by ID 
myFoos.Sort(delegate(Foo foo1, Foo foo2) 
{ 
    return foo1.ID.CompareTo(foo2.ID); 
}); 

//Sort by Last Name 
myFoos.Sort(delegate(Foo foo1, Foo foo2) 
{ 
    return foo1.LastName.CompareTo(foo2.LastName); 
}); 

匿名メソッドを使用して、ソートの同じ型を持ちたいしたくない場合複数の場所でこれを行うこともできます:

public class FooIDCompare : IComparer<Foo> 
    { 
     #region IComparer<foo> Members 

     public int Compare(Foo x, Foo y) 
     { 
      return x.ID.CompareTo(y.ID); 
     } 

     #endregion 
    } 

FooIDCompare idCompare = new FooIDCompare(); 
myFoos.Sort(idCompare); 
関連する問題