6

コンテナ内のタイプ T のデータを 2 つの T のプロパティでソートしようとしています。大量のデータになる可能性があるため、挿入時に並べ替えを行う方がよいでしょう。Listと の両方を調べましたSortedListが、どちらも必要な機能を提供していません。

C# は、挿入時の並べ替えと比較関数の並べ替えの両方を許可するコンテナーを提供しますか? のような挿入後の並べ替えをList.Sort避け、データをキーと値の両方として使用するオーバーヘッドを避けたいと思いますSortedList

4

2 に答える 2

6

.NET 4 を使用SortedSetしている場合は、カスタムIComparer<T>. 欠点は、複数の等しい要素を持つことができないことです。それが必要ですか?

ただし、大量のデータがあるからといって、挿入時に並べ替えが必要な理由は明確ではありません。挿入が完了する前にソートする必要がありますか? そうでない場合は、最後に ( を介して) 単一の並べ替えを行うと、その場List.Sort限りの並べ替えと同じくらい効率的であることが期待されます。

于 2012-07-18T19:46:14.513 に答える
2

常に同じ並べ替え順序を維持したい場合は、SortedList<K,V>orを使用してコンストラクターにSortedDictionary<K,V>a を渡すことができます。IComparer<K>

同じコンテナーで異なる並べ替え順序が必要な場合は、 a を使用してaをメソッドList<T>に渡すことができます。IComparer<T>Sort

おそらく参照型を保存しているので、アイテムを値だけでなくキーとして使用することについてもあまり心配しません。参照を保存しているだけです。

もう 1 つのオプションは、独自のバイナリ ツリー構造を実装することです。

于 2012-07-18T19:58:27.030 に答える