3

以下に示すように、OrderByメソッドを使用して10,000要素の辞書を並べ替えていますが、その大きなOを知りたいと思います。誰か知っている?それらを注文した後、私はそれらをその順序で新しい辞書に追加します。これを行うためのより良い方法があるかもしれませんが、それは私の目的のために機能します。

これが私の例です:

        m_sortedItems = new Dictionary<int,string>();
        foreach(KeyValuePair<int,string> item in collection.OrderBy(key => key.Value)){
            m_sortedItems.Add(item.Key, item.Value);
        }

msdnを確認しましたが、リストされていませんでした:http: //msdn.microsoft.com/en-us/library/bb534966.aspx

4

2 に答える 2

6

辞書は順序を維持することを保証しないため、通常の辞書内に並べ替えられたコレクションを追加しても意味がありません。これは、質問で示したコードを思いとどまらせるだけです。場合によっては機能する可能性がありますが、正しくないことを信じてください。順序集合を辞書に戻すことで、以前に行った種類が消えてしまうという事実を指摘する必要があります。KeyValuePairsをある順序で列挙し、通常のリストに追加して、挿入順序を保持したり、他のデータ構造をより適切に使用したりできます。たとえば、ソートされた辞書を見てください。もちろん、この種のデータ構造は挿入フェーズでもう少し時間がかかりますが、「自然に」順序付けられているため、一般に並べ替えは高速です。ドキュメントによると、ソートされた辞書の挿入時間は「せいぜい」O(log(n))です。ツリーベースのデータ構造は、不均衡なツリー形成のためにこのような状況に陥ることがあるため、ほぼ順序付けられた入力セットについてもパフォーマンスを調査することをお勧めします。 。これが事実であり(内部でどのように実装されているかはわかりません)、パフォーマンスが重要になる場合、別の興味深いデータ構造はBツリーです。

于 2012-10-12T18:15:38.463 に答える
3

辞書には定義された順序がないため、特定の順序でアイテムを追加することは、あなたがすべきことではありません。

ソートの大きなOに関しては、O(NlogN)が、遭遇するほとんどのソートアルゴリズムのベンチマークになります。

于 2012-10-12T18:15:39.687 に答える