タグ付けされた質問 「sorted」


5
Pythonのsorted()関数は安定していることが保証されていますか?
ドキュメントには、これを保証するものではありません。文書化されている他の場所はありますか? リストの並べ替えメソッドは安定していることが保証されており(Note 9th point: "Python 2.3以降、sort()メソッドは安定していることが保証されています")、並べ替えは機能的に似ているので、私はそれが安定していると思います。しかし、そのように言う決定的な情報源を見つけることはできません。 目的:両方のレコードで主キーが等しい場合、主キーと副キーに基づいてソートする必要があります。sort()が安定していることが保証されている場合は、2次キーでソートしてから、1次キーでソートして、必要な結果を得ることができます。 PS:混乱を避けるために、「等しい要素の相対的な順序を変更しないことが保証されている場合、ソートは安定している」という意味で、stableを使用しています。

12
Javaでソートされた配列リスト
私はこれに対する迅速な答えを見つけることができないことに困惑しています。私は基本的に、java.util.Listインターフェイスを実装するが、そのメンバーをソートされた順序で格納するJavaのデータ構造を探しています。ノーマルArrayListを使用Collections.sort()して使用できることは知っていますが、リストからメンバーを追加したり、頻繁に取得したりするシナリオがあり、メンバーを取得するたびに並べ替える必要はありません。新しいものが追加されました。JDKやサードパーティのライブラリに存在するようなものを誰かに教えてもらえますか? 編集:データ構造は重複を保持する必要があります。 回答の要約:私はこれらすべてが非常に興味深く、多くのことを学びました。特にAioobeは、上記の要件(主に、重複をサポートするソートされたjava.util.List実装)を達成しようとする彼の忍耐力について言及する価値があります。私は彼の答えを私が尋ねたものに対して最も正確であり、私が尋ねたものが正確に私が必要としたものでなかったとしても、私が探していたものの意味を刺激するものとして最も考えました。 私が求めたものの問題は、リストインターフェイス自体とインターフェイスのオプションメソッドの概念にあります。javadocを引用するには: このインターフェイスのユーザーは、リストのどこに各要素を挿入するかを正確に制御できます。 ソートされたリストへの挿入では、挿入ポイントを正確に制御することはできません。次に、いくつかのメソッドをどのように処理するかを考える必要があります。テイクadd例えば: public boolean add(Object o) Appends the specified element to the end of this list (optional operation). これで、1)コントラクトを破り、addのソートされたバージョンを実装する2)addリストの最後に要素を追加し、ソートされた順序を破るという不快な状況に置かれます3)add(オプションとして)スローして除外しますUnsupportedOperationExceptionソート順に項目を追加する別の方法を実現します。 オプション3がおそらく最良ですが、使用できないaddメソッドと、インターフェイスにない別のsortedAddメソッドがあるのは不快だと思います。 その他の関連ソリューション(順不同): java.util.PriorityQueueは、おそらく私が要求したものよりも必要なものに最も近いものです。私の場合、キューはオブジェクトのコレクションの最も正確な定義ではありませんが、機能的には必要なすべてを実行します。 net.sourceforge.nite.util.SortedList。ただし、この実装は、add(Object obj)メソッドに並べ替えを実装することでListインターフェイスの契約を破り、奇妙なことに、の効果のないメソッドがありadd(int index, Object obj)ます。一般的なコンセンサスはthrow new UnsupportedOperationException()、このシナリオではより良い選択かもしれないことを示唆しています。 GuavaのTreeMultiSet重複をサポートするセットの実装 ca.odell.glazedlists.SortedList このクラスには、javadocに警告があります。Warning: This class breaks the contract required by List
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.