2011-01-02 6 views
2

私はコレクションのクラスを探しています。これは、要素をソート順に自動的に挿入する(つまり優先度が高い)ので、後で反復するときにこの順番で要素を取得します。特定のプロパティに基づいて並べ替え順序を維持するコレクションクラスですか?


SortedList私が欲しいものではありませんこれは、キーでソートするようです。

+0

SortedDictionary <>を試しましたか? http://msdn.microsoft.com/en-us/library/f7fta44c.aspx –

+0

@ Harvey:キーをソートします。私は鍵が必要ない。 – mpen

+0

この文 "SortedListはキーで並べ替えるようですが、これは私が望むものではありません。"あなたの疑問は矛盾です。ソートされた順序の任意の種類が課されるためには、比較関数(したがって、比較されるべきキー)がなければならない!おそらくFIFOキューが必要でしょうか? –

答えて

2

PriorityQueueが必要です。このような質問には、いくつかの実装があります:C# Priority Queue

+1

Hehe ...また私の質問:)違いは、今回は私です優先度を別にする必要はありません。 – mpen

3

SortedSet<T>は、.NET 4で新しく使用できます。これは、IComparable<T>を実装するクラスで使用することも、コンストラクタのオーバーロードによって外部比較器を提供することもできます。例:

class Foo 
{ 
    public int Bar { get; set; } 
} 

class FooComparer : IComparer<Foo> 
{ 
    public int Compare(Foo x, Foo y) 
    { 
     // add null checking, demo purposes only 
     return x.Bar.CompareTo(y.Bar); 
    } 
} 

...

SortedSet<Foo> sortedFoos = new SortedSet<Foo>(new FooComparer()); 
sortedFoos.Add(new Foo() { Bar = 2 }); 
sortedFoos.Add(new Foo() { Bar = 1 }); 

foreach (Foo foo in sortedFoos) 
{ 
    Console.WriteLine(foo.Bar); 
} 
// Prints 1, 2 

注:このコレクションはHashSet<T>ように振る舞う。等しいと比較する複数のオブジェクトを追加すると、それらは破棄されます。

+0

私は欲しいもののように見えます。データ型に 'IComparable'を実装すると、それを使用すると思いますか? – mpen

+0

また、ソートが「安定」であると仮定しますか? - equalを比較する2つの要素が挿入された場合、最初の要素はまだセットの最初の要素になりますか? – mpen

+0

@Ralph、はい、それは 'IComparable 'をサポートします。詳細については、MSDNのドキュメントから始めます。 http://msdn.microsoft。com/ja-jp/library/dd412070.aspx –

関連する問題